kettle插件加载流程
来源:互联网 发布:高达独角兽淘宝 编辑:程序博客网 时间:2024/06/06 08:33
前言
kettle遵循着插件机制,基于插件使得kettle整个结构非常清晰,耦合性低,移植性强,特别是对kettle进行二次开发尤其方便,根据了解,扩展step类型的插件比较多,具体步骤可以参考:http://blog.csdn.net/d6619309/article/details/50020977 。通过了解插件的加载流程,不仅kettle的原理有深一层的认识,还有助于在进行二次开发遇到问题的时候进行定位(例如,最近遇到个情况就是通过kettle api创建资源库,但在使用spoon工具保存转换到该资源库时出错,其实就是因为资源库中step类型与实际中step插件不一致导成的,造成不一致的原因是因为通过api创建资源库时kettle环境中加载不到某些插件信息),本文是基于kettle5.x,插件类型很多,选取StepPluginType类型为例进行描述。
PluginRegistry了解
PluginRegistry是一个提供所有访问所有kettle插件的单例。可以通过它注册插件类型以及插件,还可以查询每种类别的插件,挑几个以下会用到的属性进行说明
Map< Class< ? extends PluginTypeInterface>, List> categoryMap:插件类型->该类型插件的类目,category对应spoon工具左侧的插件种类,如:’输入’,’输出’等
List< PluginTypeInterface> pluginTypes:保存了kettle的插件类型,在环境初始化的时候会把所有类型添加到该list里面。
Map< Class< ? extends PluginTypeInterface>, List> pluginMap:插件类型->该类型的具体插件,例如:StepPluginType->[表输入,表输出……]
插件加载–PluginRegistry.init()
- 注册PluginRegistryPluginType插件类型,并获得该类型的插件并加载初始化,最后保存到List extensions,可以不关注该步骤
- 调用registerPluginType(StepPluginType)方法进行注册:
- 把StepPluginType添加到pluginMap中,如果StepPluginType未注册,则初始化一个空的List用来保存该插件类型的具体插件
- 把StepPluginType添加到categoryMap中,如果StepPluginType未注册,则初始化一个空的List来保存该插件类型的类目
- 把插件类型注册之后,根据该类型查找所有该类型的具体插件,它会通过3种方式来加载:
- registerNatives():查找原生的step插件。首先加载kettle-steps.xml(该配置文件在kettle-engine模块中)获取里面所有step配置,可以在环境变量中设置“KETTLE_CORE_STEPS_FILE”来覆盖默认的kettle-steps.xml;然后调用
registerPluginFromXmlResource()
,解析出step所有的属性,根据属性构造出来个Plugin对象;接着,把该插件信息保存到pluginMap与categoryMap对应插件类型的value(List)中;最后 ,触发该插件类型的添加、改变插件的事件 。 - registerPluginJars():根据jar包注册插件(通过注解方释来描述插件)。首先,Windows下先会默认从
[plugins, plugins\steps, C:\Users\Administrator\.kettle\plugins, C:\Users\Administrator\.kettle\plugins\steps]
这几个目录中查找StepPluginType类型的插件jar包;然后,调用handlePluginAnnotation():通过注解解析出所有插件相关的描述属性,并构造Plugin对象;接着,把该插件信息保存到pluginMap与categoryMap对应插件类型的value(List)中;最后 ,触发该插件类型的添加、改变插件的事件 。 - registerXmlPlugins():根据xml配置文件注册插件。首先,Windows下先会默认从
[plugins, plugins\steps, C:\Users\Administrator\.kettle\plugins, C:\Users\Administrator\.kettle\plugins\steps]
这几个目录中查找StepPluginType类型插件的配置文件:xxxplugin.xml;然后,解析节点内容,并调用registerPluginFromXmlResource(),解析出step所有的属性,根据属性构造出来个Plugin对象;接着,把该插件信息保存到pluginMap与categoryMap对应插件类型的value(List)中;最后 ,触发该插件类型的添加、改变插件的事件 。
- registerNatives():查找原生的step插件。首先加载kettle-steps.xml(该配置文件在kettle-engine模块中)获取里面所有step配置,可以在环境变量中设置“KETTLE_CORE_STEPS_FILE”来覆盖默认的kettle-steps.xml;然后调用
- 还可以从环境变量中读取“KETTLE_PLUGIN_CLASSES”的值,从中加载指定的插件,该方法对调试模式非常有利,可以通过在eclipse中启动spoon时添加VM arguments:
DKETTLE_PLUGIN_CLASSES=org.pentaho.di.trans.steps.gpload.GPLoadMeta,org.pentaho.di.core.database.PALODatabaseMeta //以逗号隔开
流程图
- kettle插件加载流程
- Kettle插件开发流程
- Nutch插件加载流程
- kettle插件
- kettle插件开发流程(转)-看不懂,先记着
- kettle api 方式加载plugins 里面的插件
- Kettle数据固化流程
- kettle plugin 插件开发
- Kettle plugin 插件开发
- SequoiaDB的 Kettle插件
- kettle-step插件结构
- kettle-插件开发
- 学习kettle插件
- 通过kettle 的gpload 插件和greenplum-loaders实现批量并行加载
- kettle etl采集流程v1
- kettle etl step插件制作
- Kettle插件开发(Job)
- 开发kettle插件 环境搭建
- SourceTree 删除远程的分支
- Java小白进阶之三---抽象类与接口的异同
- android 控件 fragment 生命周期
- 顺序表应用1:多余元素删除之移位算法
- Spring Boot入门helloworld
- kettle插件加载流程
- React Native实战之ReactJS组件生命周期
- View中的ScrollTo和ScrollBy
- CocosStudio(十二)ListView列表容器
- 让sql语句不排序,按照in语句的顺序返回结果
- java设计模式——抽象工厂模式
- 南邮数据结构、算法实践周提高题3(图的连通问题和二叉排序树)
- 欢迎使用CSDN-markdown编辑器
- 获取一段字符串中每个单词的次数(用空格分隔)