使用MongoDB输出步骤修改脚本中的水壶getStepMetaInterface()函数错误

时间:2015-04-19 09:24:03

标签: mongodb pentaho kettle

使用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输出步骤有关,因为这是一个水壶插件,但我不确定。

感谢任何回应!!

2 个答案:

答案 0 :(得分:0)

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

以下是您必须从Modified Java Script步骤中获取外部插件(本示例中的Big Data插件)的箍的示例: https://github.com/brosander/pentaho-hadoop-shims/blob/verification-2/test/verification/jobs/dependencies/ForceHiveToConnectRemotely.ktr

答案 1 :(得分:0)

首先,感谢解决问题的 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文件,此错误就会消失。