Teiid Пользовательские функции Java, определенные пользователем, не видны

#odata #wildfly #teiid

#odata #wildfly #teiid

Вопрос:

Я использую серверы teiid-wildfly. Я следовал примеру пользовательских функций, приведенному в документации teiid. Ниже приведен мой файл vdb. Пожалуйста, дайте мне знать, если мне нужно импортировать какие-либо дополнительные свойства для просмотра / доступа к пользовательским функциям. URL метаданных (http://localhost:8080/odata4/UDFTest/JavaCall /$metadata) не содержит списка определяемых пользователем функций и ошибок в журнале сервера. Я создал файл jar, который содержит реализацию файла TempConv, и завершил настройку в каталоге модуля.

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<vdb name="UDFTest" version="1">
<property name ="lib" value ="org.test"></property>
<model visible="true" name="JavaCall" type="VIRTUAL">
<metadata   type="DDL">
<![CDATA[
CREATE VIRTUAL FUNCTION celsiusToFahrenheit(celsius double) RETURNS double OPTIONS (JAVA_CLASS 'org.test.TempConv',  JAVA_METHOD 'celsiusToFahrenheit');
]]> </metadata>
</model>
</vdb>
     
 

Ответ №1:

У OData есть известная проблема с отображением функций: см. https://issues.redhat.com/browse/TEIID-5736

Обходным путем было бы использовать вместо этого процедуру.

Комментарии:

1. Спасибо Стивену Хокинсу. Если я использую процедуру, тогда требуется реализация для тела процедуры. Фактическая реализация в файле java, поэтому, пожалуйста, посоветуйте, что нужно реализовать в теле процедуры. СОЗДАТЬ ВИРТУАЛЬНУЮ ПРОЦЕДУРУ celsiusToFahrenheit(celsius double) ВОЗВРАЩАЕТ двойные ПАРАМЕТРЫ (org.test JAVA_CLASS. TempConv’, JAVA_METHOD ‘celsiusToFahrenheit’); Ошибка сервера.log TEIID31081 Виртуальная процедура JavaCall.celsiusToFahrenheit не была определена телом процедуры в модели JavaCall.celsiusToFahrenheit

2. Вам просто нужно, чтобы процедура вызывала функцию: создать виртуальную процедуру celsiusToFahenheit(celsius double) возвращает функции двойного возврата.celsiusToFahrenheit(celsius);;