gpt4 book ai didi

java - Pentaho在同一个jar中启动一个java程序

转载 作者:行者123 更新时间:2023-12-02 11:15:47 25 4
gpt4 key购买 nike

我们有一个组织报告门户,我们使用 Pentaho。现在的问题是,我们需要定义一个 Java Jar,其中包含 Pentaho + java 文件 + sql。

我能够通过 Pentaho 执行 SQL,但我需要通过 pentaho 在同一个 jar 中执行一个类。这可以通过用户定义的 Java 类来完成。但怎么做呢?如何在KTR中直接导入java类--> UserDefinedJavaClass。

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 文件所在的位置
  • 如果使用与部署 ETL 的用户不同的用户安装 pentaho,他可能无权访问/lib 和/libext 文件夹
  • 如果您有更复杂的 java 代码和逻辑,最好将其保存在 jar 中,而不是放在转换中(将 java 代码放在两个地方是维护 hell )。因此,将 jar 添加到 pentaho 不会比仅调用 java -jar MyJar.jar 带来任何好处

关于java - Pentaho在同一个jar中启动一个java程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50291966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com