Kettle Plugin插件开发指导
2014-11-01 15:43
281 查看
Kettle Plugin插件开发指导
2. 搭建kettle源代码环境
3. 在Eclipse中构建kettle项目
4. 在Eclipse中构建插件项目
5. 配置插件到Kettle中
6. Kettle项目启动
7. 在kettle项目集成插件源代码
TemplateStep: 步骤类实现了StepInteface接口,在转换运行时,它的实例将是数据实际处理的位置。每一个执行线程都表示一个此类的实例。
TemplateStepData: 数据类用来存储数据,当插件执行时,对于每个执行的线程都是唯一的。执行时里面存储的东西主要包括数据库连接、文件句柄、缓存等等其他东西。
TemplateStepMeta: 元数据类实现了StepMetaInterface接口。它的职责是保存和序列化特定步骤实例的配置,在我们这个例子中,它负责保存用户设置的步骤名称和输出字段的名称。
TemplateStepDialog:对话框类实现了该步骤与用户交互的界面,它显示一对话框,通过对话框用户可以自己的喜好设定步骤的操作。对话框类与元数据类关系非常紧密,O(∩_∩)O~ 想想为什么吧?(元数据类可以追踪用户的设置)
除了上面的代码,还有一个plugin.xml,它设置好了插件的元数据,定义了步骤在kettle图形工作台中的显示效果。为了更好的让大家理解,我将利用这个步骤设计一个转换流程并执行它。对于插件的开发,我们将从plugin.xml配置文件开始讲起,然后讲讲元数据和对话框类,最后再讲讲步骤类和数据类。
3 plugin.xml
<?xmlversion="1.0" encoding="UTF-8"?>
<plugin
id="TemplatePlugin"
iconfile="icon.png"
description="TemplatePlugin"
tooltip="Onlythere for demonstration purposes"
category="Demonstration"
classname="plugin.template.TemplateStepMeta">
<libraries>
<libraryname="templatestep.jar"/>
</libraries>
</plugin>
ID:在kettle插件中必须全局唯一,因为被kettle序列化了,所以不要随便改变
Iconfile: kettle中插件显示的图片,必须是png图片
Description:插件描叙,显示在树形菜单里面。
Tooltip:树形菜单中,鼠标滑过的时候显示的提示信息
Category:插件显示的父目录
Classname:元数据类
Library:指明了插件需要加载所依赖的jar包
// keep track ofthe step settings
public String getOutputField()
public void setOutputField(…)
public void setDefault()
// serialize thestep settings to and from xml
public String getXML()
public void loadXML(…)
// serialize thestep settings to and from a kettle repository
public void readRep(…)
public void saveRep(…)
// provideinformation about how the step affects the field structure of processed rows
public void getFields(…)
// performextended validation checks for the step
public void check(…)
// provideinstances of the step, data and dialog classes to Kettle
public StepInterface getStep(…)
public StepDataInterface getStepData()
public StepDialogInterface getDialog(…)
TemplateStepMeta元数据类其实还有很多方面,不过大多被他的父类BaseStepMeta给默认实现了,这些默认的实现足以使我们的元数据类工作良好。想要了解更多,大家可以查查关于StepMetaInteface和BaseStepMeta的kettle官方文档。
//initialization and teardown
public boolean init(…)
public void dispose(..)
// processingrows
public void run()
public boolean processRow(..)
Init()方法在转换执行前被kettle调用,转换必须在所有步骤初始化成功时才真正执行。本文例子里面没有做任何事情,这里仅仅是拿出来让大家了解了解。
dispose()方法是在步骤执行完之后执行(非转换执行完哈),它完成资源的关闭,像文件句柄、缓存等等。
run()方法在实际处理记录集的时候调用, 其实就是个循环, 由上游获取的每条记录交由processRow()方法处理,当此步骤没有数据处理或转换被停止时退出循环。
processRow()方法在处理单条记录的时候被调用。这个方法通常通过调用getRow()来获取需要处理的单条记录。这个方法如果有需要将会被阻塞,例如当此步骤希望放慢脚步处理数据时。processRow()随后的流程将执行转换工作并调用putRow()方法将处理过的记录放到它的下游步骤。
注意:步骤可能会改变记录的数据结构,为了安全起见,一定要多熟悉包org.pentaho.di.core.row,特别是类RowMetaInterface和RowDataUtil。
基类BaseStep对处理的记录提供了第一次访问的标识,在某些代码只执行一次的时候可能非常有用,例如某个费时的查找,需要缓存的时候很有用。
1 开发步骤
1. Kettle插件开发介绍2. 搭建kettle源代码环境
3. 在Eclipse中构建kettle项目
4. 在Eclipse中构建插件项目
5. 配置插件到Kettle中
6. Kettle项目启动
7. 在kettle项目集成插件源代码
2 kettle转换步骤工作组件
这里有四个类构成了这个kettle 步骤/节点,每一个类都有其特定的目的及所扮演的角色。TemplateStep: 步骤类实现了StepInteface接口,在转换运行时,它的实例将是数据实际处理的位置。每一个执行线程都表示一个此类的实例。
TemplateStepData: 数据类用来存储数据,当插件执行时,对于每个执行的线程都是唯一的。执行时里面存储的东西主要包括数据库连接、文件句柄、缓存等等其他东西。
TemplateStepMeta: 元数据类实现了StepMetaInterface接口。它的职责是保存和序列化特定步骤实例的配置,在我们这个例子中,它负责保存用户设置的步骤名称和输出字段的名称。
TemplateStepDialog:对话框类实现了该步骤与用户交互的界面,它显示一对话框,通过对话框用户可以自己的喜好设定步骤的操作。对话框类与元数据类关系非常紧密,O(∩_∩)O~ 想想为什么吧?(元数据类可以追踪用户的设置)
除了上面的代码,还有一个plugin.xml,它设置好了插件的元数据,定义了步骤在kettle图形工作台中的显示效果。为了更好的让大家理解,我将利用这个步骤设计一个转换流程并执行它。对于插件的开发,我们将从plugin.xml配置文件开始讲起,然后讲讲元数据和对话框类,最后再讲讲步骤类和数据类。
3 plugin.xml
<?xmlversion="1.0" encoding="UTF-8"?>
<plugin
id="TemplatePlugin"
iconfile="icon.png"
description="TemplatePlugin"
tooltip="Onlythere for demonstration purposes"
category="Demonstration"
classname="plugin.template.TemplateStepMeta">
<libraries>
<libraryname="templatestep.jar"/>
</libraries>
</plugin>
ID:在kettle插件中必须全局唯一,因为被kettle序列化了,所以不要随便改变
Iconfile: kettle中插件显示的图片,必须是png图片
Description:插件描叙,显示在树形菜单里面。
Tooltip:树形菜单中,鼠标滑过的时候显示的提示信息
Category:插件显示的父目录
Classname:元数据类
Library:指明了插件需要加载所依赖的jar包
3元数据类
下面是元数据的几个关键的方法,注意元数据类里面用私有成员变量outputField 存储了下一个步骤的输出字段。// keep track ofthe step settings
public String getOutputField()
public void setOutputField(…)
public void setDefault()
// serialize thestep settings to and from xml
public String getXML()
public void loadXML(…)
// serialize thestep settings to and from a kettle repository
public void readRep(…)
public void saveRep(…)
// provideinformation about how the step affects the field structure of processed rows
public void getFields(…)
// performextended validation checks for the step
public void check(…)
// provideinstances of the step, data and dialog classes to Kettle
public StepInterface getStep(…)
public StepDataInterface getStepData()
public StepDialogInterface getDialog(…)
TemplateStepMeta元数据类其实还有很多方面,不过大多被他的父类BaseStepMeta给默认实现了,这些默认的实现足以使我们的元数据类工作良好。想要了解更多,大家可以查查关于StepMetaInteface和BaseStepMeta的kettle官方文档。
4对话框类
TemeplateStepDialog为步骤实现了对话框的设置,kettle的用户界面部件是使用的eclipse的swt框架,如果要开发比较复杂的对话框,你还必须熟悉大部分swt代码。 Swt文档大家可以从eclipse上的帮助菜单点击在线获取。 在开发过程中,一个对话框对象拥有一个元数据对象,它记录了应该从哪里读取配置?应该把设置好的配置保存在哪里?它仅仅设置了输出字段的名称在我们这个模板步骤里面。一个继承自BaseStepDialog特定的对话框类必须提供open(…)方法,这个方法必须返回这个步骤的名称(发生改变时)或NULL(对话框被取消时)5步骤类
步骤类是实际的处理和转换工作的地方。因为大部分样本代码已经由父类BaseStep提供了,插件开发者只需要关注下面几个特定的方法就行了。//initialization and teardown
public boolean init(…)
public void dispose(..)
// processingrows
public void run()
public boolean processRow(..)
Init()方法在转换执行前被kettle调用,转换必须在所有步骤初始化成功时才真正执行。本文例子里面没有做任何事情,这里仅仅是拿出来让大家了解了解。
dispose()方法是在步骤执行完之后执行(非转换执行完哈),它完成资源的关闭,像文件句柄、缓存等等。
run()方法在实际处理记录集的时候调用, 其实就是个循环, 由上游获取的每条记录交由processRow()方法处理,当此步骤没有数据处理或转换被停止时退出循环。
processRow()方法在处理单条记录的时候被调用。这个方法通常通过调用getRow()来获取需要处理的单条记录。这个方法如果有需要将会被阻塞,例如当此步骤希望放慢脚步处理数据时。processRow()随后的流程将执行转换工作并调用putRow()方法将处理过的记录放到它的下游步骤。
注意:步骤可能会改变记录的数据结构,为了安全起见,一定要多熟悉包org.pentaho.di.core.row,特别是类RowMetaInterface和RowDataUtil。
基类BaseStep对处理的记录提供了第一次访问的标识,在某些代码只执行一次的时候可能非常有用,例如某个费时的查找,需要缓存的时候很有用。
6数据类
大多数步骤都需要临时的缓冲或者临时的存储。数据类就是这些数据合适的存放位置。每一个执行线程拥有的一个数据类的实例,所以它们能在独立的空间里面运行。TemplateStepData继承自BaseStepData,作为一个经验法则,不要将non-constant字段放置 BaseStepData类里面,如果一定要,请将它最好放置在派生类TemplateStepData里面.相关文章推荐
- Kettle plugin 插件开发
- 安卓cordove插件开发指导(android plugin development guide)
- kettle plugin 插件开发
- plugin development guide(翻译)cordova插件开发指导
- (插件Plugin)AssemblyLoader解决方案(插件开发)
- 学习eclipse插件开发资源全收集(plugin)
- Netbeans 插件模块(Plugin Module)的开发
- Netbeans 插件模块(Plugin Module)的开发
- Eclipse插件(Plugin)开发中的NoClassDefFoundError的解决。
- Chrome 插件开发指导
- 我的Firefox插件开发之旅(5)——编译和测试第一个Plugin例子:npruntime
- Eclipse plugins 插件开发学习 - 在 plugin.xml 中使用资源文件 plugin.properties
- 有关插件开发中Manifest.MF和plugin.xml以及激活器的可有可无总结
- 关于CakePHP中的插件(Plugin/Helper等)开发的相关资料
- Firefox plugin插件开发及冲击响应实现
- Firefox插件开发(5)——编译和测试第一个Plugin例子:npruntime
- 学习eclipse插件开发资源全收集(plugin)
- 学习eclipse插件开发资源全收集(plugin)
- Netbeans 插件模块(Plugin Module)的开发
- ETL工具——kettle插件开发(基础篇)