Kettlec 调用wcf接口 WCF接口

kettle plugin 插件开发
kettle plugin 插件开发
作者:jiangchao&&来源:博客园&&发布时间: 09:11&&阅读:602 次&&原文链接&&
/display/COM/PDI+Plugin+Loading
svn://source.pentaho.org/svnkettleroot/plugins/S3CsvInput
&?xml version=&1.0& encoding=&UTF-8&?&
id=&TemplatePlugin&
iconfile=&icon.png&
description=&Template Plugin&
tooltip=&Only there for demonstration purposes&
category=&Demonstration&
classname=&plugin.template.TemplateStepMeta&&
&libraries&
&library name=&templatestep.jar&/&
&/libraries&
ID:在kettle插件中必须全局唯一,因为被kettle序列化了,所以不要随便改变
Iconfile: kettle中插件显示的图片,必须是png图片
Description:插件描叙,显示在树形菜单里面。
Tooltip:树形菜单中,鼠标滑过的时候显示的提示信息
Category:插件显示的父目录
Classname:元数据类
Library:指明了插件需要加载所依赖的jar包
kettle转换步骤工作组件:
&&&&&& 这里有四个类构成了这个kettle 步骤/节点,每一个类都有其特定的目的及所扮演的角色。
TemplateStep: 步骤类实现了StepInteface接口,在转换运行时,它的实例将是数据实际处理的位置。每一个执行线程都表示一个此类的实例。
TemplateStepData: 数据类用来存储数据,当插件执行时,对于每个执行的线程都是唯一的。执行时里面存储的东西主要包括数据库连接、文件句柄、缓存等等其他东西。
TemplateStepMeta: 元数据类实现了StepMetaInterface接口。它的职责是保存和序列化特定步骤实例的配置,在我们这个例子中,它负责保存用户设置的步骤名称和输出字段的名称。
TemplateStepDialog:对话框类实现了该步骤与用户交互的界面,它显示一对话框,通过对话框用户可以自己的喜好设定步骤的操作。对话框类与元数据类关系非常紧密,O(∩_∩)O~ 想想为什么吧? (元数据类可以追踪用户的设置)
除了上面的代码,还有一个plugin.xml,它设置好了插件的元数据,定义了步骤在kettle图形工作台中的显示效果。为了更好的让大家理解,我将利用这个步骤设计一个转换流程并执行它。对于插件的开发,我们将从plugin.xml配置文件开始讲起,然后讲讲元数据和对话框类,最后再讲讲步骤类和数据类。
&======================================================================================
&&&&&&在我们做ETL工作的时候,在某些项目中往往会遇到一些特别的流程任务,kettle原有的流程处理节点已经不能满足我们的要求,这时 候我们就需要定制流程处理节点了。定制流程节点主要是针对数据的管理、数据的验证和某些特别文件数据的提取。大家通过查看kettle源代码,就可以知道 怎样去创建你自己的kettle插件了。
这篇文章主要告诉大家在kettle 4.0版本上怎样开发一个transformation类型的简单插件,这个插件可以接受任何记录流,然后在流后面再添加一个带值的字段,用户能够定义字段的名称,插件非常简单。O(∩_∩)O~ 我将尽可能简洁的介绍开发插件需要掌握的一些接口规范。
准备工作:
&1、下载pdi-ce-4.0.0-stable.zip,供桌面测试用。
2、下载eclipse,任何版本都可以,装好SVN插件,后面下载kettle源代码之用。
3、& 下载标准插件源代码模板工程。
建立插件工程:
1、& 将下载的“标准插件源代码模板工程”导入到您的工作空间
2、& 导入后工程会有一些错误,那是因为依赖的包没有导入。这时,你需要解压pdi-ce-4.0.0-stable.zip,进入解压目录将lib目录下面 kettle打头的所有jar包以及libswt/win32下面的swt.jar包(这个大家依赖操作系统导入)加入工程环境变量里面。
3、& 重新编译一下工程,应该就没有错误了。
kettle转换步骤工作组件:
&&&&&& 这里有四个类构成了这个kettle 步骤/节点,每一个类都有其特定的目的及所扮演的角色。
TemplateStep:& 步骤类实现了StepInteface接口,在转换运行时,它的实例将是数据实际处理的位置。每一个执行线程都表示一个此类的实例。
TemplateStepData: &数据类用来存储数据,当插件执行时,对于每个执行的线程都是唯一的。执行时里面存储的东西主要包括数据库连接、文件句柄、缓存等等其他东西。
TemplateStepMeta: 元数据类实现了StepMetaInterface接口。它的职责是保存和序列化特定步骤实例的配置,在我们这个例子中,它负责保存用户设置的步骤名称和输出字段的名称。
TemplateStepDialog:对话框类实现了该步骤与用户交互的界面,它显示一对话框,通过对话框用户可以自己的喜好设定步骤的操作。对话框类与元数据类关系非常紧密,O(∩_∩)O~ 想想为什么吧? (元数据类可以追踪用户的设置)
除了上面的代码,还有一个plugin.xml,它设置好了插件的元数据,定义了步骤在kettle图形工作台中的显示效果。为了更好的让大家理解,我将利用这个步骤设计一个转换流程并执行它。对于插件的开发,我们将从plugin.xml配置文件开始讲起,然后讲讲元数据和对话框类,最后再讲讲步骤类和数据类。
书写你自己的plugin.xml:
&&&&&& 下面plugin.xml是我们这个插件里面的内容,它的功能是告诉kettle插件的元数据类,插件的名称及描叙,还有需要加载的jar包。想要了解细节,可以查看文章:plug-in loading
&?xml version=&1.0& encoding=&UTF-8&?&
id=&TemplatePlugin&
iconfile=&icon.png&
description=&Template Plugin&
tooltip=&Only there for demonstration purposes&
category=&Demonstration&
classname=&plugin.template.TemplateStepMeta&&
&libraries&
&library name=&templatestep.jar&/&
&/libraries&
ID:在kettle插件中必须全局唯一,因为被kettle序列化了,所以不要随便改变
Iconfile: kettle中插件显示的图片,必须是png图片
Description:插件描叙,显示在树形菜单里面。
Tooltip:树形菜单中,鼠标滑过的时候显示的提示信息
Category:插件显示的父目录
Classname:元数据类
Library:指明了插件需要加载所依赖的jar包
一、元数据类:
&&&&&&&& 下面显示了元数据的几个关键的方法,注意元数据类里面用私有成员变量outputField 存储了下一个步骤的输出字段。
&// keep track of the step settings
public String getOutputField()
public void setOutputField(…)
public void setDefault()
// serialize the step settings to and from xml
public String getXML()
public void loadXML(…)
// serialize the step settings to and from a kettle repository
public void readRep(…)
public void saveRep(…)
// provide information about how the step affects the field structure of processed rows
public void getFields(…)
// perform extended validation checks for the step
public void check(…)
// provide instances of the step, data and dialog classes to Kettle
public StepInterface getStep(…)
public StepDataInterface getStepData()
public StepDialogInterface getDialog(…)&
TemplateStepMeta元数据类其实还有很多方面,不过大多被他的父类BaseStepMeta给默认实现了,这些默认的实现足以使我们 的元数据类工作良好。想要了解更多,大家可以查查关于StepMetaInteface和BaseStepMeta的kettle官方文档。
二、对话框类:
&&&&&&&& TemeplateStepDialog为步骤实现了对话框的设置,kettle的用户界面部件是使用的eclipse的swt框架,如果要开发比较复杂的对话框,你还必须熟悉大部分swt代码。 Swt文档大家可以从eclipse上的帮助菜单点击在线获取。 在开发过程中,一个对话框对象拥有一个元数据对象,它记录了应该从哪里读取配置?应该把设置好的配置保存在哪里? 它仅仅设置了输出字段的名称在我们这个模板步骤里面。一个继承自BaseStepDialog特定的对话框类必须提供open(…)方法,这个方法必须返
回这个步骤的名称(发生改变时)或NULL(对话框被取消时)
三、步骤类:
&&&&&&&& 步骤类是实际的处理和转换工作的地方。因为大部分样本代码已经由父类BaseStep提供了,大多数插件仅仅关注下面几个特定的方法就行。
&// initialization and teardown
public boolean init(…)
public void dispose(..)
// processing rows
public void run()
public boolean processRow(..)
Init()方法在转换执行前被kettle调用,转换必须在所有步骤初始化成功时才真正执行。我们这个模板步骤没有做任何事情,这里仅仅是拿出来让大家了解了解。
dispose()方法是在步骤执行完之后执行(非转换执行完哈),它完成资源的关闭,像文件句柄、缓存等等。
run()方法在实际处理记录集的时候调用。里面其实是个调用processRow()方法处理记录的小循环,当此步骤再没有数据处理或转换被停止时退出循环。
processRow()方法在处理单条记录的时候被调用。这个方法通常通过调用getRow()来获取需要处理的单条记录。 这个方法如果有需要将会被阻塞,例如当此步骤希望放慢脚步处理数据时。processRow()随后的流程将执行转换工作并调用putRow()方法将处 理过的记录放到它的下游步骤。
注意:你的步骤可能会变记录的结构,为了安全起见,一定要多熟悉包org.pentaho.di.core.row,特别是类RowMetaInterface和RowDataUtil。
&&基类BaseStep对处理的记录提供了第一次访问的标识,在某些代码只执行一次的时候可能非常有用,例如某个费时的查找,其实这就是缓存。
四、数据类:
&&&&&&&& 大多数步骤都需要临时的缓冲或者临时的数据。数据类就是这些数据合适的存放位置。每一个执行线程将得到其拥有的数据类实例,所以它能在独立的空间里面运 行。TemplateStepData继承自BaseStepData,作为一个经验法则,不要将non-constant字段放置 BaseStepData类里面,如果你必须,请将它最好放置TemplateStepData数据类里面.
我们的步骤仅仅使用了一个数据对象来存储记录集输出的结构,没有用到其他的存储介质,例如文件等等。
&&&&&&&& 一个kettle步骤插件包括4个类,每一个类都有自己的角色和职责,元数据、对话框、步骤和数据类很好的结合在一起工作,特别是因为很多样板代码和通用的方法已经被父类实现,使得kettle的插件开发非常容易,若有需要讨论的,大家可以在上给我留言,欢迎打扰!下一篇我们将具体讲解的插件开发及调试。O(∩_∩)O~
=================================debug=====================================================
kettle插件调试比较麻烦,因为是两个不同工程的依赖,但是大家如果掌握方法,其实也很简单,回顾JAVA常用的调试手法,如Link Source、JAVA远程调试,如果大家了解maven,甚至可以直接依赖调试,下面我来作重讲讲前面两种调试手法。
准备工作:
1、通过eclipse上的svn插件下载kettle4.0源码,地址是:http://source.pentaho.org/svnkettleroot/Kettle/branches/4.0.0&
下载完成之后,发现eclipse里面存在两个工程:TemplateStepPlugin,Kettle 4.0.0,若有不同,请参见文章ETL工具——kettle插件开发(基础篇)
2、下载我这里给你准备的测试转换文件test.ktr
一、Link Source调试:
1、在Kettle4.0工程下面,进入plugins-&steps目录,发现里面有个DummyPlugin目录,其就是kettle官 方提供的外部转换插件,细心地读者发现里面仅用三个文件DPL.png、dummy.jar、plugin.xml,其实它就是一个完整插件所需要的东 西。
2、在与DummyPlugin同级目录里面,建立文件夹TemplateStep, 将TemplateStepPlugin工程下面的icon.png、plugin.xml文件拷贝至此,jar包就不用了
否则调试时会关联不上源码,O(∩_∩)O~ 想想为什么吧??
3、最重要的一步来了,大家右击工程Kettle 4.0.0,选择属性Properties, 然后在左手边选择Java Build Path, 然后在上面的选项卡里面选择Source,此时右边就有几个按钮,
点击Link Source按钮,设置好你的插件源码目录以及目录名字,见下图:
4、运行。 关联好之后,咱们找到kettle的入口运行类Spoon.java,大家可以通过快捷键ctrl+shift+R找出此类选择调试运行即可,进入kettle工作台,打开测试文件test.ktr,
查看是否能正常运行,此时大家就可以在插件类TemplateStep里面打断点调试了,其他情况不再多说了
二、kettle远程调试
远程调试的关键是首先你的在kettle启动配置里面设置远程调试参数,然后在eclipse里面设置远程调试监控的端口号,这样就ok了。
1、进入pdi-ce-4.0.0-stable.zip解压出来的目录(上一篇文章:ETL工具——kettle插件开发(基础篇)),编辑启动配置文件Spoon.bat,linux下当然是spoon.sh
&在文件里面加入这么一句话:
set OPT=-Xdebug -Xnoagent -piler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8285
位置参见下图:
2、点击Spoon.bat,进入kettle工作台
3、打开eclipse,进入菜单Run——&Debug Configurations,选择左边的Remote Java Application,右键新建一个远程调试应用程序,设置如下图,
端口就是上面参数里面的端口8285,一切ok,选择选择下面的debug按钮。
4、在kettle工作台,运行刚才的测试转换文件 test.ktr,eclipse开始监听调试了,大家断点设置就可。
======================================================================================
//输入行的元数据,并设置为输出行的元数据。
RowMetaInterface outputRowMeta = getInputRowMeta().clone();
//构造一个新的输出列。方法一
RowMetaInterface rowMeta = new RowMeta();
Object[] rowData = new Object[1];
int valtype = ValueMeta.getType(&String&);
ValueMetaInterface valueMeta = new ValueMeta( “FieldName1”, valtype); valueMeta .setLength(-1);
rowMeta.addValueMeta(valueMeta);
RowMetaAndData metaAndData = new RowMetaAndData(rowMeta, rowData);
RowMetaInterface newMeta = metaAndData.getRowMeta();
outputRowMeta.mergeRowMeta(newMeta);
//构造一个新的输出列。方法二
RowMetaInterface outputRowMeta = getInputRowMeta().clone();
int valtype = ValueMeta.getType(&String&);
ValueMetaInterface valueMeta = new ValueMeta( “FiledName1”, valtype);
valueMeta.setLength(-1);
outputRowMeta.addValueMeta(valueMeta);
//从上一个步骤获得一行数据。
Object[] r =
r = getRow();
//获得一行数据里,某一个字段的值
String fieldname = “MyOldField”;
int fieldIndex = this.getInputRowMeta().indexOfValue(fieldName);
Object value = r[fieldIndex];
//将新的数据追加到原来的行数据的后面,成为新的输出行:(转载请注明:http://pdi.itpub.net)
Object[] values = new Object[1];
values[0]=”new value”;
r = RowDataUtil.addRowData(r, getInputRowMeta().size(),values);
//将输出行的元数据和数据放到缓存里,这样下一个步骤可以读取了,注意元数据的个数和数据的个数要相等。:(转载请注明:http://pdi.itpub.net)
putRow(outputRowMeta, r);
》点击查看原文...
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
etl kettle plugin 实例 博客分类: kettle etl kettleetlstepplugin
自己开发之前看过了网络上很多文章,大多文章简单直接翻译官网或转载,不适合初学者参考.现自己已经开发成功,将个人对程序的理解贴出给大家做个参考. 有图有真相,程序结构先看图: Step
类实际要执行的业务逻辑,真对到行级的 ...
Eclipse的每一个plugin都有属于自己的类加载器,这是OSGI架构的基础,每一个plugin项目都是一个bundle,独立运行在各自的运行环境里面,这就造成了开发时和运行时的不同. Eclipse插件开发,切记不要随便引入别的plugin工程到自己的classPath中,正确的做法应该是引用插件依赖.下面就分几种情况来讲一下这个Eclipse插件项目 ...
这两周一直在做Firefox插件的工作,以及一些冲击响应模型的实现. 工作基本分为四部分:一插件开发,一开始还打算用ActiveX,后来BOSS说Firefox不太容易实现,转至用静态库去实现firefox plugin.三天时间基本实现这个插件,开发周期很短,工作很顺利,顺利在vc6.0编译npruntime(建议不要使用太高的版本xulrunner-sd ...
本文大部分内容转自:http://blog.fens.me/java-kettle-plugin-eclipse/ 在配置过程中出现了一些问题,这里给出解决方案以及资源. 前言 Kettle一个开源的ETL工具,提供了一套界面操作的解决方案,从而代替原有的程序开发.但有时我们还需要开发自己的插件,来满足我们的业务需求.Kettle基于Eclipse的架构系统 ...
一.CRM基本知识 1.CRM2001 有几个服务端点? 答:对外公开的服务,如Web服务,WCF,Restful API 2.一个ERP系统,要访问CRM的数据,CRM2011有哪些现有的服务入口提供给我 答:从JS访问CRM数据,用的是REST. CRM2011并不提供现成的数据库方式的访问服务. 端口就两个:rest
soap 一共3个:a.发现 ...
这是一篇几年前写下的文档,最近打算根据这篇文档重写一下kettle插件的教程.结果各种理由,一推再推.今天索性将这篇文档发布出来,分享给大家,例子等有空再补上.这是一篇基于kettle3.2基础上完成的kettle插件文档.然而现在最新版的kettle的界面已经完全变了样了,但是那些组件还是那么熟悉.对数据处理稍微熟悉点的应该对kettle都不陌生,kett ...
最近因为项目需要接触了kettle,需要为用户定制一些特定的转换. 下面记录一下自己的学习经历. 下载的kettle版本文件稳定版,从github上面下载
github不熟的朋友可以参考文章
如何更好的理解和使用Github fork一个版本
然后clone in
https://github ...
此篇文章以cordova 3.4版本编写 phonegap的插件开发
与javascript调用android的Activity功能,以及相互传递数据. 本节讲的是 自主编写 phonegap插件提供下载 据我总结核心步骤:
创建工程 ; 编写插件 ;编译工程; 调用插件;
按照如下步骤就能生产出代码: 打开cmd 控制台 1 使用 ...ETL利器Kettle实战应用解析系列二 【应用场景和实战DEMO下载】_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
ETL利器Kettle实战应用解析系列二 【应用场景和实战DEMO下载】
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩10页未读,继续阅读
你可能喜欢Kettle4.2 源代码分析_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Kettle4.2 源代码分析
上传于||文档简介
&&K​e​t​t​l​e. ​源​代​码​分​析
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩42页未读,继续阅读
你可能喜欢kettle 4.2源码分析第二讲--Kettle插件结构体系简介
kettle 4.2源码分析第二讲--Kettle插件结构体系简介
[摘要:1. 插件系统布局 1.1. 插件技巧道理 1.1.1. 插件观点解释 插件是一种遵守同一的预界说接心范例编写出去的顺序,运用顺序正在运转时经过接心范例对插件举行挪用,以扩大运用顺序的功效]
1.& 插件体系结构
1.1. 插件技术原理
1.1.1.&&& 插件概念说明
  插件是一种遵循统一的预定义接口规范编写出来的程序,应用程序在运行时通过接口规范对插件进行调用,以扩展应用程序的功能。在英文中插件通常称为plug-in、plugin或者plug in。插件最典型的例子是Eclipse开发平台,Microsoft的ActiveX控件和COM(Component Object Model,部件对象模型)实际上ActiveX控件不过是一个更高继承层次的COM而已。此外还有Photoshop的滤镜(Filter)也是一种比较常见的插件,还有就是Mozilla
Firefox,Foobar等等也遵循着插件机制。
  插件最吸引人的地方当然就是其所实现“运行时(Run-time)”功能扩展。这意味着软件开发者可以通过公布插件的预定义接口规范,从而允许第三方的软件开发者通过开发插件对软件的功能进行扩展,而无需对整个程序代码进行重新编译。运行时是相对于编译时(Assembly-time)而言的。一般来说,软件开发者对软件功能更新时,是在源代码级别进行更新,然后对整个程序进行重新编译,进而发布应用程序的新版本,这就是编译时的软件更新。
  插件的本质在于不修改程序主体(或者程序运行平台)的情况下对软件功能进行扩展与加强,当插件的接口公开后,任何公司或个人都可以制作自己的插件来解决一些操作上的不便或增加新的功能,也就是实现真正意义上的“即插即用”软件开发。“平台+插件软件结构”是将一个待开发的目标软件分为两部分,一部分为程序的主体或主框架,可定义为平台,另一部分为功能扩展或补充模块,可定义为插件。
  在进行软件开发之前,是否采用“平台+插件软件结构”进行软件开发,还要依据具体的软件需求情况进行确定,但一般来讲,使用“平台+插件软件结构”进行软件设计会给所开发软件增加新的生命力。当确定“平台+插件的软件结构”之后,就要分析哪些部分功能由主体完成(即平台的基本功能),哪些部分功能由插件完成(即需要扩展的插件功能)。平台所完成的功能应为一个软件系统的核心和基础,这些基本功能即可为用户使用,也可为插件使用,就是又可以把平台基本功能分为两个部分,内核功能和插件处理功能。平台的内核功能是整个软件的重要功能,一个软件的大部分功能因由内核功能完成。平台的插件处理功能用于扩展平台和管理插件,为插件操纵平台和与插件通信提供标准平台扩展接口。插件所完成的功能是对平台功能的扩展与补充,一般插件完成系列化功能。
  为了实现平台+插件结构的软件设计需要定义两个标准接口,一个为由平台所实现的平台扩展接口,一个为插件所实现的插件接口。这里需要说明的是:平台扩展接口完全由平台实现,插件只是调用和使用,插件接口完全由插件实现,平台也只是调用和使用。平台扩展接口实现插件向平台方向的单向通信,插件通过平台扩展接口可获取主框架的各种资源和数据,可包括各种系统句柄,程序内部数据以及内存分配等。插件接口为平台向插件方向的单向通信,平台通过插件接口调用插件所实现的功能,读取插件处理数据等。
  平台插件处理功能包括插件注册、管理和调用,以及平台扩展接口的功能实现。插件注册为按照某种机制首先在系统中搜索已安装插件,之后将搜索到的插件注册到平台上,并在平台上生成相应的调用机制,这包括菜单选项、工具栏、内部调用等。插件管理完成插件与平台的协调,为各插件在平台上生成管理信息以及进行插件的状态跟踪。插件调用为调用各插件所实现的功能。平台插件处理功能实现的另一部分功能为平台扩展接口的具体实现。
1.1.2.&&& 插件接口的认识
  开发支持插件功能的应用程序必须解决一个问题:如何在主程序与插件间正确地互相通信。为了在主程序与插件之间能正确地互相通信,应该先制定一套通信标准,这套通信标准就是接口,主程序与插件只能通过制订好的接口进行通信。软件开发中,接口只是定义功能并规定调用功能的形式,而不包含功能的实现。接口实质上是软件模块的调用规范。在后续章节中我们将会介绍kettle开发的插件中,常用的几种通讯方式。
  就开发支持插件功能的应用程序而言,一般来说由主程序的开发者来制订接口,如果希望其他的开发人员能开发相关的插件,只要公开相关接口即可。接口功能一般由插件方实现。因为插件的实现也要调用主程序的功能,所以接口功能也可能由主程序来实现。也就是说,主程序与插件的信息流可能是双向的。
  接口的调用规范与功能实现互相分离有一个很大的优点:尽管不同的插件开发者对同一个接口的具体实现不同,但是在主程序中对这些插件的调用方式是一样的。如果有主程序实现的接口,在不同的插件中也可以用相同的使用方式调用主程序的功能。这极大的提高了应用程序的灵活性。
1.1.3.&&& 程序结构及其运行机制
  主程序中,插件管理部分用于管理插件的安装和删除,并将所有安装插件的信息保存到适合的地方,例如保存到注册表或配置文件中。主程序启动时,根据插件的配置信息加载插件模块,然后获得插件的输出函数或输出类的指针并加以保存,如果需要的话,可以向主程序增加界面接口元素,如菜单、工具条按钮等。在主程序中当点击与插件相关联的接口元素时,就会触发插件调用函数,在插件调用函数中使用主函数中所保存的插件信息调用插件中实现的功能。在调用插件输出函数时也可以把主程序中实现的接口传递给插件方。
1.2. Kettle体系结构
图 2-1 Kettle插件架构
  Kettle分为kettle平台、各类插件。其中kettle平台是整个系统的基础,包括UI、插件管理、元数据管理和数据集成引擎。UI显示Spoon这个核心组件的界面,通过xul实现菜单栏、工具栏的定制化,显示插件界面接口元素。元数据管理引擎管理ktr、kjb或者元数据库,插件通过该引擎获取基本信息。插件管理引擎主要负责插件的注册。数据集成引擎负责调用插件,并返回相应信息。
1.2.1.&&& 插件扩展机制
  Kettle是众多“可供插入的地方”(扩展点)和“可以插入的东西”(扩展)共同组成的集合体。在我们的生活中,电源接线板就是一种“扩展点”,很多“扩展”(也就是电线插头)可以插在它上面。
  在Kettle中不管是以后的扩展还是系统集成的功能,本质上来讲都是插件,管理方式和运行机制是一致的。系统集成的功能点也均实现了对应的扩展接口,只是在插接的说明上略有不同。
  Kettle的扩展点包括step插件、job entry插件、Database插件、Partioner插件、debugging插件,这里我们重点介绍step、job entry、database插件。暴露的扩展点如下表所示:
表 1 Step扩展接口
StepMetaInterface
BaseStepMeta
存储step设置信息
验证step设置信息
序列化step设置信息
提供获取step类的方法
StepDialogInterface
BaseStepDialog
step属性信息配置窗口
StepInterface
StepDataInterface
BaseStepData
为数据处理提高数据存储
表 2 job entry扩展接口
JobEntryInterface
JobEntryBase
存储job entry设置信息
序列化job entry设置信息
提供获取job entry类的方法
执行job entry任务
JobEntryDialogInterface
JobEntryDialog
job entry属性信息配置窗口
表 3 Database 扩展接口
DatabaseInterface
BaseDatabaseMeta
访问各类数据库
1.2.2.&&& 插件的建立
  Kettle中的插件包含两部分,一是系统本身就已经实现的功能点,在源码目录src中说明,如kettle-steps.xml;二是系统之外开发的插件,在plugins目录对应插件目录下的plugins.xml说明,plugins/steps/S3CsvInput/plugins.xml。
系统集成插件定义(step为例)
                表 4 系统自带插件定义
插件说明信息
src/kettle-steps.xml,所有插件集中说明
src与src-ui下,org.pentaho.di.steps.插件名
插件说明xml中说明
插件界面文字说明
org.pentaho.di.steps.插件名.messages
  插件说明信息中包括描述信息、类名(包括package,反射用)、父级目录(Spoon左侧栏目录)、提示信息和图片信息。Kettle使用国家化方式编程,所以软件中的所有文字描述均由messages_**.properties提供。
图 2-2 系统集成插件说明xml结构
扩展插件定义
所以新开发的扩展插件,均放在同一的目录下进行管理,插件管理模块会自动去该目录下进行搜索查找。插件目录结构如下所示:
图 2-3 扩展插件目录结构
表 5 扩展插件定义
插件说明信息
plugins/插件类型/插件名称/plugin.xml
plugins/插件类型/插件名称/
插件依赖包
plugins/插件类型/插件名称/
扩展插件与系统集成插件的说明内容相似,扩展插件增加ID属性和依赖属性,同时他的目录结构、描述信息和提示信息均能进行国际化配置。
图 2-4 扩展插件说明xml结构
1.2.3.&&& 插件的注册
  Spoon在启动的时候会对所有插件进行注册,并保存在PluginRegistry类里面。平台通过查找PluginRegistry注册表获取插件信息。Kettle安装插件需要进行重启,卸载插件也只需简单的删除plugins目录结构下对应的文件即可。
图 2-5 插件注册时序图
图 2-6 plugin注册相关的UML类图
  PluginRegistry首选注册本系统的插件类型处理类,源码中注册了7中类型,我们这里仅介绍3中,并以StepPluginType为例。注册类型处理类后,PluginRegistry按照不同的类型进行插件搜索(模板模式),基类BasePluginType提供了本地搜索、jar搜索、xml信息搜索3种钩子。根据搜索结果,按照不同的插件类型存储在PluginRegistry中。
1.2.4.&&& 插件查找
  PluginRegistry提供了插件查找功能,准确的来说是插件信息的查找功能。以steps在左侧功能栏里面的显示为例,进行插件查找的说明。提供了getPlugins获取指定插件类型列表、getPlugin获取指定成名插件、getCateories获取目录结构、getClass获取指定插件类等方法。
图 2-7 Spoon中step列表
  左侧显示由Spoon.refreshCoreObjects()函数实现,如果选择时trans相关的内容,将显示所有的step插件。流程图如下所示:
图 2-8 spoon界面step插件显示流程
1.2.5.&&& 插件调用
  Kettle中调用插件时,平台通过元素管理引擎获取对应的插件信息,通过反射生成插件对象,调用对应的函数。Kettle以外观模式的方式调用插件,我们以双击某个插件图表,弹出对应配置界面为例进行说明,具体的转换时调用将在后面进一步说明。
  Spoon界面交互相关的处理器都封装到SpoonDelegates中,根据不同的事件类型调用对应的事件处理函数。UML类图如下所示。
图 2-9 事件代理类
  SpoonStepsDelegate提供了与UI交互相关的处理事件,如复制、删除、粘贴、编辑等。双击某个step时会调用编辑功能,编辑功能是对插件StepDialogInterface的封装。时序图如下:
图 2-10 双击编辑step时序图
  双击是TransGraph对象注册的时间,双击是根据页面上的坐标信息获取双击的stepmeta对象(来自于*.ktr)。然后,将这个对象传给事件代理类处理,根据stepmeta对象,获取对应的插件类名,通过反射生成StepDialogInterface的实例并调用open()方法。
1.2.6.&&& 插件间通信
  Kettle插件之间天生就具有通信共享数据的特点,kettle中最主要通信方式是通过插件时间共同关联一个数据类对象的方式进行通信;使用单例模式实现插件间信息共享。
  第一种方式还设计多线程同步的问题,在后面的章节中将会进行重点介绍。
1.2.7.&&& 插件生命周期
  Kettle并不能做到热插拔,每次添加或者删除插件的时候都需要重启。安装或删除插件,只需要在plugins文件夹下添加或删除对应的文件即可。
2.& 平台体系结构
2.1. 元数据管理引擎
  元数据主要包括转换元数据(.ktr)和Job元数据(.kjb),元数据也可以存储在数据库中,这里我们主要介绍文件存储形式的。
  元数据管理类包括TransMeta,该类定义了一个转换(对应一个.ktr文件),提供了保存和加载该文件的方法;JobMeta类,同样对应于一个工作(.kjb文件),提供保存和加载方法。StepMeta类保存的是Step的一些公共信息的类,每个类的具体的元数据将保存在显示了StepMetaInterface的类里面。
  两个类中主要保存的信息如下:
代码 1 TransMeta类主要属性
1 private List&StepMeta&
3 private List&TransHopMeta&
5 private Stri
7 private Result
previousR//上一个jobentry的执行结果。
9 private List&RowMetaAndData& ;//resultR这次trans执行后的数据结果。 10
11 private List&ResultFile&
  steps字段对应于.ktr中的&step&节点,hops字段对应于&hop&节点。resultRows、previousResult实际上是插件见的通信类。
代码 2 JobMeta类主要属性
1 protected S
3 protected S 4
5 public List&JobEntryInterface&//保存jobentry列表 6
7 public List&JobHopMeta&//保存jobentries之间的链接关系。 8
9 public List&DatabaseMeta&
2.2. UI显示
2.2.1.&&& TransGraph类
图 3-1 TransGraph类与显示
  选中转换标签后,红框内的编辑区对象对应org.pentaho.di.ui.spoon.trans包中的TransGraph类。
2.2.2.&&& JobGraph类
图 3-2 JobGraph与显示
  选中Job标签后,红框内的编辑区对象对应org.pentaho.di.ui.spoon.job包中的JobGraph类。
2.3. 转换执行引擎
2.3.1.&&& Trans类
  Trans类负责转换执行相关的所有任务,包括转换加载、相关插件的实例化、初始化、运行、监视转换执行,并把内容放置到TransInfo类中。
2.3.2.&&& StepInitThread类
  Step初始化线程包装类,使用多线程,调用所有StepInterface实现类的Init函数。
2.3.3.&&& StepMetaDataCombi类
  把插件的主要实现类全部存储在这个类中,方便集中调用。
1 public class StepMetaDataCombi
public StepMeta stepM
public int 10
public StepI 12
public StepMetaI 14
public StepDataI 16
2.3.4.&&& RunThread类
  步骤处理线程包装类,这个类能够处理异常并将其记录到日志中。同时,也能够在异常发生或者执行结束后,记录相关内容、关闭相关资源。
2.4. Job执行引擎
2.4.1.&&& Job类
  Job的执行类,本身实现了Thread是一个单独的线程。Job entry可以是单独的线程,也可以是顺序执行,大多数情况都是顺序执行下一步以上一步的执行结果为基础。Job类也包括转换加载、相关插件的实例化、初始化、运行、监视Job执行。
转自:/wukenaihe/p/3212385.html
感谢关注 Ithao123精品文库频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊}

我要回帖

更多关于 java cxf 调用wcf接口 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信