带有 MongoDB 输出步骤的修改脚本中的 Kettle getStepMetaInterface() 函数错误

Kettle getStepMetaInterface() function error in Modified Script with MongoDB Output step

使用 pentaho 5.3,Modified Java Script Value 步骤注入这些数据。

我想在 MongoDB 输出步骤中动态设置路径和名称。这是我的代码

var meta = new org.pentaho.di.trans.TransMeta( source_path );
var mongoStep = meta.findStep("MongoDB Output");
mongoStep.setDescription('This is MongoDB Output by Ray');
Alert(mongoStep.getName());  // code is ok until here.
var mongoStepMeta = mongoStep.getStepMetaInterface()  // error occurs here

当我想让getStepMetaInterface()使用步进函数时,出现错误。

java.lang.LinkageError: loader constraint violation: loader (instance of org/pentaho/di/core/plugins/KettleURLClassLoader) previously initiated loading for a different type with name "org/pentaho/metastore/api/IMetaStore"

这个错误似乎是违反了.jar。

但是当我使用那些原始的步骤时,比​​如"Microsoft Access Input",我可以成功地得到getStepMetaInterface()。这样我就可以使用AccessInputMeta.java.

中定义的所有函数了

从我的角度来看,这个问题可能与MongoDB输出步骤有关,因为这是kettle的插件,但我不确定。

感谢任何回复!!

是的,这是因为插件系统。 Modified Java Script 步骤和 Access Input 步骤(以及许多其他步骤)都在 Kettle 引擎中并共享一个类加载器。外部插件(如 MongoDB Input/Output)有自己独立的类加载器。您必须对线程上下文类加载器和反射做一些巫术才能获得这些步骤的 Meta 类。

这是一个示例,您必须跳过这些步骤才能从修改后的 Java 脚本步骤获取外部插件(本示例中的大数据插件): https://github.com/brosander/pentaho-hadoop-shims/blob/verification-2/test/verification/jobs/dependencies/ForceHiveToConnectRemotely.ktr

首先感谢解决问题的Mass
这是他的建议: 此问题是由jar 文件冲突.

引起的

在pentaho安装中有两个jar文件:

-lib/metastore-5.3.0.0-213.jar
-plugins/pentaho-mongodb-plugin/lib/metastore-5.3.0.0-213.jar

只需删除最后一个 jar 文件,此错误就会消失。