Kettle允许我们自定义开发插件以支持实际项目中特殊的流程,关于Kettle插件体系的介绍可以参考链接:http://www.tuicool.com/articles/2YVZFv。这篇文章主要是针对Step插件的开发总结,不涉及开发其他类型插件的介绍。注意Kettle版本为5.x和4.x的插件结构稍有不同,本文针对的Kettle版本为5.x版本。
假设我们要实现一个step插件,命名为XXX,下面的类是必须实现的:
public class Xxx extends BaseStep implements StepInterface
public class XxxMeta extends BaseStepMeta implements StepMetaInterface
public class XxxData extends BaseStepData implements StepDataInterface
public class XxxDialog extends BaseStepDialog implements StepDialogInterface
【备注】
Kettle的插件体系已经相当完善,为了节省开发者自定义插件所花费的时间和精力,已经将大部分核心方法都实现并封装在各自的基类中,如BaseStep、BaseStepMeta、BaseStepDialog。如果想再进一步了解Kettle Step插件,可以阅读BaseXXX相关源码。
Step流程处理类,当Step真正运行起来,就是在这个实现类里面进行数据处理的,大部分核心方法都在BaseStep父类里面实现了,需要我们自行实现的方法有以下几个:
processRow(...) // 步骤流程处理主方法
init(...) // 步骤初始化的逻辑处理
dispose(...) // 步骤处理结束后的逻辑处理,可以在这里释放资源,关闭数据库连接等
实现这个类的作用有以下几点:
大部分核心方法都已经在BaseStepMeta父类中实现了,其中需要我们重写实现的方法有以下几个:
getDialogClassName() // 自定义XxxDialog的包结构和类名
getStep(...) // 构造Xxx实例
getStepData(...) // 构造XxxData实例
getFields(...) // 处理输入参数和输出参数
getXML(...) // 将Meta需要保存的数据以xml文本形式返回
loadXML(...) // 从xml节点中获取Meta数据
saveRep(...) // 将Meta需要保存的数据持久化到资源库中
readRep(...) // 从资源库中获取Meta数据
Step流程处理临时数据存储,实现该接口的类用来暂存流程处理过程所需要用到的数据。
Step插件数据设置对话框,在spoon中拖动该Step到设计区并双击时,就会调用这个实现类的open方法,实现该接口的类用来设置StepMeta相关属性,其中需要我们实现的核心方法为:
open() // 双击图标时候触发,负责渲染生成界面并添加XxxMeta核心数据到界面上
可以用@Step注解定义来代替plugin.xml定义,@Step注解用于XxxMeta。关于@Step注解的使用说明可以参考以下链接:
http://wiki.pentaho.com/display/EAI/Annotated+step+plugin+development
国际化使spoon界面展示的说明文字、日志信息能够适应不同国家语言。
下面以我最近开发的一个Kettle插件来向大家分析插件开发的具体步骤。
【备注】
插件介绍和相关源码请查看github地址:
https://github.com/ZzzCrazyPig/kettle-dubboclient-plugin.git
【注意】
将DubboClientDialog放在com.gosun.di.trans.steps.dubboclient
包下是因为默认情况下程序会在这个包下找对应的XxxDialog (这里的Xxx为DubboClient),可以通过重写DubboClientMeta的getDialogClassName()方法来指定具体的包名和类名:
实现的四个类分别为DubboClient、DubboClientMeta、DubboClientData、DubboClientDialog。详情参考源码。
2.2.3 DubboClientMeta上的@Step注解配置
item | 说明 |
---|---|
id Step | 插件唯一标识 |
image | 指定Step插件在Spoon中显示的图标 |
i18nPackageName | 指定国际化messages所在的包名 |
name | Step插件命名 |
description | Step插件描述 |
categoryDescription | 指定Step插件所属的Spoon转换目录 |
【备注】
对于上图所取的categoryDescription,对应的BaseStep.Category.Lookup
应该在StepPluginType这个类的注解里面可以找到(也可以在对应的注解里面新建目录):
在@Step注解中指定的i18nPackageName显示我们要存储国际化信息的基目录,根据上面的指定,在com.gosun.di.trans.steps.dubboclient
新建messages包。在这个包下面新建多个properties,命名规则为messages_[locate].properties
,其中locate表示国家,如en_US
表示美国,zh_CN
表示中国。