Pentaho запускает Java-программу в той же банке - PullRequest
0 голосов
/ 11 мая 2018

У нас есть портал отчетов организации, для которого мы используем Pentaho. Теперь выгода заключается в том, что нам нужно определить один jav-файл java, в котором есть все файлы Pentaho + java + sql.

Я могу выполнить SQL через Pentaho, но мне нужно выполнить класс в том же банке через Pentaho. Это можно сделать через пользовательский класс Java. Но как это сделать? Как напрямую импортировать Java-класс в KTR -> UserDefinedJavaClass.

Структура папок в банке:

MainJar
| -testJob.kjb
| -TestTransformer.ktr
| -Com.mainTest.HelloWorld.class

Как вызвать HelloWorld.class из test.ktr?

1 Ответ

0 голосов
/ 11 мая 2018

Мне не удалось заставить его работать с шагом пользовательского класса Java, но вместо этого я использовал шаг Javascript. Вам нужно сначала скопировать JAR в папку pentaho / lib или / libext. Затем в шаге модифицированного JavaScript я просто позвонил в класс. Вот мой шаг XML

<entry>
  <name>JavaScript</name>
  <description />
  <type>EVAL</type>
  <script>
   var filename=parent_job.getVariable("filename","");
   var filenameClean=filename+"_clean";
   package.CsvCleaner(filename,filenameClean);
  </script>
  <parallel>N</parallel>
  <draw>Y</draw>
  <nr>0</nr>
  <xloc>800</xloc>
  <yloc>1008</yloc>
</entry>

Важная часть package.CsvCleaner(filename,filenameClean); на самом деле вызывает конструктор класса с двумя параметрами, и я добавил свой код в конструктор. Вы также можете вызывать методы и прочее.

Полагаю, пользовательская Java вызывается аналогичным образом - добавьте jar в / lib, импортируйте класс и используйте его.

У меня есть один совет, хотя. По моему мнению, лучше оставить JAR с фактическим кодом ETL (и не делать его частью pentaho, добавив его в / lib или / libext) и выполнить его с помощью команды оболочки - что-то вроде java -jar MyProg.jar В противном случае у вас будет странные проблемы:

  • со старой версией Jar в папке установки pentaho
  • сложная установка, потому что этот jar не там, где находятся файлы kjb и kjt
  • если pentaho установлен с пользователем, отличным от пользователя, развертывающего ETL, он может не иметь прав доступа к папкам / lib и / libext
  • Если у вас более сложный java-код и логика, лучше хранить его в jar, а не в преобразовании (наличие java-кода в двух местах - адское обслуживание). Поэтому добавление jar в pentaho не даст вам никакой выгоды, чем просто вызов java -jar MyJar.jar
...