您的位置:首页 > 其它

Kettle Plugin插件开发指导

2014-11-01 15:43 281 查看
Kettle Plugin插件开发指导

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里面.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息