繁体   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