簡體   English   中英

Pentaho在同一個jar中啟動一個Java程序

[英]Pentaho start a java program inside the same jar

我們有一個使用Pentaho的組織報告門戶。 現在要抓住的是,我們需要定義一個單個的Java Jar,其中包含Pentaho + Java文件+ sql。

我可以通過Pentaho執行SQL,但是我需要通過pentaho在同一jar中執行一個類。 這可以通過用戶定義的Java類來完成。 但是怎么做呢? 如何在KTR-> UserDefinedJavaClass中直接導入Java類。

jar中的文件夾結構:

MainJar
| -testJob.kjb
| -testTransformer.ktr
| -com.mainTest.HelloWorld.class

如何從test.ktr調用HelloWorld.class?

我無法使其與“用戶定義的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代碼(並且不要通過將其添加到/ lib或/ libext使其成為pentaho的一部分),並使用shell命令執行它-類似於java -jar MyProg.jar否則您將遇到奇怪的問題:

  • 在pentaho安裝文件夾中有一個較舊版本的Jar
  • 較難安裝,因為該jar不在kjb和kjt文件所在的位置
  • 如果pentaho的安裝用戶不同於部署ETL的用戶,則他可能無權訪問/ lib和/ libext文件夾
  • 如果您有更復雜的Java代碼和邏輯,最好將其保存在jar中,而不是放在轉換中(將Java代碼放在兩個地方是一個維護地獄)。 因此,將jar添加到pentaho不會給您帶來任何好處,僅需調用java -jar MyJar.jar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM