1,在DI设计器中设计好 转换 之后 ,该 转换 会以 .ktr 文件的形式持久存储到本地磁盘。并且Kettle提供了方法调用 使得能从 .ktr 文件解析出 transMeta对象 。而transMeta对象 就是表征 转换 运行的一个JAVA对象。
2,从 .ktr 文件解析出transMeta对象非常简单,首先要进行运行环境的初始化。否则会报一个 DBCache 类的运行时错误。这个类的对象在创建transMeta对象时会用到。
try { KettleEnvironment.init(); } catch (KettleException e) { e.printStackTrace(); return; }
transMeta = new TransMeta(ktr, (Repository) null);
3,transMeta 对象是不能序列化的。因为TransMeta类里面有许多未实现Serializable接口的属性,如:
因此,要想传递transMeta对象,除了上面说到的从 .ktr 文件来解析,还有就是将 transMeta对象转成 String对象,这可以通过 String transMetaXML = transMeta.getXML(); 来完成;然后,再将transMetaXML 保存成文件的形式
saveMetaString(this.transMetaXML, fname)//将transMetaXML 保存成文件 readTransMetaFromFile(fname);//从该文件中解析出transMeta对象 ---------------------------------------------------------------------------- private boolean saveMetaString( String transMetaString, String fname) { boolean saved = false; String xml = XMLHandler.getXMLHeader() + transMetaString; try { //write trans meta string into a tmp file fname DataOutputStream dos = new DataOutputStream(KettleVFS.getOutputStream(fname, false)); dos.write(xml.getBytes(Const.XML_ENCODING)); dos.close(); saved = true; } catch( KettleFileException e ) { e.printStackTrace(); } catch( UnsupportedEncodingException e ) { e.printStackTrace(); } catch( IOException e ) { e.printStackTrace(); } return saved; } private void readTransMetaFromFile(String fname) { try { //rebuild a TransMeta object from file Document document = XMLHandler.loadXMLFile(fname); Node root = document.getDocumentElement(); if( transMeta == null ) { transMeta = new TransMeta(); transMeta.loadXML(root, fname, null, null, true, new Variables(), null); } } catch( KettleXMLException e ) { e.printStackTrace(); } catch( KettleMissingPluginsException e ) { e.printStackTrace(); } }
4,此外,关于Kettle插件开发,以及 扩展Kettle 转换、作业 的官方参考文档:
http://infocenter.pentaho.com/help/index.jsp?topic=%2Fpdi_embed_extend_guide%2Ftask_building_transforms_on_the_fly.html
关于 Kettle的开发 主要参考:Develop Custom Solutions > Embed and Extend DI
本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/,如需转载请自行联系原作者