ExecutorService executor = Executors.newCachedThreadPool();
Future<KettleException> pluginRegistryFuture = executor.submit( new Callable<KettleException>() {
@Override
public KettleException call() throws Exception {
registerUIPluginObjectTypes();
KettleClientEnvironment.getInstance().setClient( KettleClientEnvironment.ClientType.SPOON );
try {
KettleEnvironment.init();
} catch ( KettleException e ) {
return e;
}
return null;
}
} );
1.main方法里面,kettle运行环境初始化
2.开始转换
类E:\IdeaProjects\kettle\engine\org\pentaho\di\trans\step\RunThread.java
中step.processRow( meta, data ),开始每一步的 转换,按照不同的转换类型,不同的实现类
Data用于保存运行数据,Meta用于保存配置元数据,有与资源库交互的实现
实现StepInterface的不同的step各个功能个不一样,但是它们之间也有一定的规律性。下图只列举了两个step,(TextInput)文本输入和Uniquerow(去重)。BaseStep封装了getRow()和putRow()方法,从上一个步骤获取数据和将数据输入到下一个步骤。
基类BaseStep采取了统一的处理方式,调用子类processRow以行为单位处理,核心代码如下。
while (stepInterface.processRow(meta, data)&& !stepInterface.isStopped());
processRow( )通用过程是:调用基类BaseStep 的getRow( )得到数据,对一行数据处理,处理之后调用基类putRow( )方法数据保存至outputRowSets(即next step的inputRowSets)