Kettle5.x step插件开发总结

1. 前言

Kettle允许我们自定义开发插件以支持实际项目中特殊的流程,关于Kettle插件体系的介绍可以参考链接:http://www.tuicool.com/articles/2YVZFv。这篇文章主要是针对Step插件的开发总结,不涉及开发其他类型插件的介绍。注意Kettle版本为5.x和4.x的插件结构稍有不同,本文针对的Kettle版本为5.x版本。

2. 开发总结

2.1. Step插件开发TODO

假设我们要实现一个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相关源码。

2.1.1. 实现Xxx

Step流程处理类,当Step真正运行起来,就是在这个实现类里面进行数据处理的,大部分核心方法都在BaseStep父类里面实现了,需要我们自行实现的方法有以下几个:

  • processRow(...) // 步骤流程处理主方法
  • init(...) // 步骤初始化的逻辑处理
  • dispose(...) // 步骤处理结束后的逻辑处理,可以在这里释放资源,关闭数据库连接等

2.1.2. 实现XxxMeta

实现这个类的作用有以下几点:

  • 负责Step流程元数据处理
  • 存储数据展示在对应的StepDialog上
  • 将核心数据保存在xml、资源库中,并可以从xml或者资源库读取并构成XxxMeta对象

大部分核心方法都已经在BaseStepMeta父类中实现了,其中需要我们重写实现的方法有以下几个:

  • getDialogClassName() // 自定义XxxDialog的包结构和类名
  • getStep(...) // 构造Xxx实例
  • getStepData(...) // 构造XxxData实例
  • getFields(...) // 处理输入参数和输出参数
  • getXML(...) // 将Meta需要保存的数据以xml文本形式返回
  • loadXML(...) // 从xml节点中获取Meta数据
  • saveRep(...) // 将Meta需要保存的数据持久化到资源库中
  • readRep(...) // 从资源库中获取Meta数据

2.1.3. 实现XxxData

Step流程处理临时数据存储,实现该接口的类用来暂存流程处理过程所需要用到的数据。

2.1.4. 实现XxxDialog

Step插件数据设置对话框,在spoon中拖动该Step到设计区并双击时,就会调用这个实现类的open方法,实现该接口的类用来设置StepMeta相关属性,其中需要我们实现的核心方法为:

  • open() // 双击图标时候触发,负责渲染生成界面并添加XxxMeta核心数据到界面上

2.1.5. 用注解代替plugin.xml

可以用@Step注解定义来代替plugin.xml定义,@Step注解用于XxxMeta。关于@Step注解的使用说明可以参考以下链接:
http://wiki.pentaho.com/display/EAI/Annotated+step+plugin+development

2.1.6. 国际化(可选)

国际化使spoon界面展示的说明文字、日志信息能够适应不同国家语言。

2.2. 插件开发实例分析

下面以我最近开发的一个Kettle插件来向大家分析插件开发的具体步骤。
【备注】
插件介绍和相关源码请查看github地址:
https://github.com/ZzzCrazyPig/kettle-dubboclient-plugin.git

2.2.1. Step插件开发包结构预览

【注意】
将DubboClientDialog放在com.gosun.di.trans.steps.dubboclient包下是因为默认情况下程序会在这个包下找对应的XxxDialog (这里的Xxx为DubboClient),可以通过重写DubboClientMeta的getDialogClassName()方法来指定具体的包名和类名:

2.2.2. 实现的四个类

实现的四个类分别为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这个类的注解里面可以找到(也可以在对应的注解里面新建目录):

2.2.3. 国际化的实现

在@Step注解中指定的i18nPackageName显示我们要存储国际化信息的基目录,根据上面的指定,在com.gosun.di.trans.steps.dubboclient新建messages包。在这个包下面新建多个properties,命名规则为messages_[locate].properties,其中locate表示国家,如en_US表示美国,zh_CN表示中国。

你可能感兴趣的:(java,Kettle,插件)