码迷,mamicode.com
首页 > 其他好文 > 详细

kettle插件加载流程

时间:2016-08-20 00:05:08      阅读:448      评论:0      收藏:0      [点我收藏+]

标签:

kettle插件加载流程

1.前言

  kettle遵循着插件机制,基于插件使得kettle整个结构非常清晰,耦合性低,移植性强,特别是对kettle进行二次开发尤其方便,根据个人了解,扩展step类型的插件比较多,具体步骤可以参考:http://blog.csdn.net/d6619309/article/details/50020977  。通过了解插件的加载流程,不仅kettle的原理有深一层的认识,还有助于在进行二次开发遇到问题的时候进行定位(例如,最近遇到个情况就是通过kettle api创建资源库,但在使用spoon工具保存转换到该资源库时出错,其实就是因为资源库中step类型与实际中step插件不一致导成的,造成不一致的原因是因为通过api创建资源库时kettle环境中加载不到某些插件信息),本文是基于kettle5.x,插件类型很多,选取StepPluginType类型为例进行描述。

 

2.PluginRegistry了解

     PluginRegistry是一个提供所有访问所有kettle插件的单例。可以通过它注册插件类型以及插件,还可以查询每种类别的插件,挑几个以下会用到的属性进行说明:

  • Map<Class<? extends PluginTypeInterface>, List<String>> categoryMap:插件类型->该类型插件的类目,category对应spoon工具左侧的插件种类,如:‘输入’,‘输出’等
  • List<PluginTypeInterface> pluginTypes:保存了kettle的插件类型,在环境初始化的时候会把所有类型添加到该list里面。
  • Map<Class<? extends PluginTypeInterface>, List<PluginInterface>> pluginMap插件类型->该类型的具体插件,例如:StepPluginType->[表输入,表输出......] 

3.插件加载--PluginRegistry.init()

  1. 注册PluginRegistryPluginType插件类型,并获得该类型的插件并加载初始化,最后保存到List<PluginRegistryExtension> extensions,可以不关注该步骤
  2. 调用registerPluginType(StepPluginType)方法进行注册:
    1. StepPluginType添加到pluginMap中,如果StepPluginType未注册,则初始化一个空的List<PluginInterface>用来保存该插件类型的具体插件
    2. StepPluginType添加到categoryMap中,如果StepPluginType未注册,则初始化一个空的List<String>来保存该插件类型的类目
  3. 把插件类型注册之后,根据该类型查找所有该类型的具体插件,它会通过3种方式来加载:
    1. registerNatives():查找kettle原生的step插件。首先加载kettle-steps.xml(该配置文件在kettle-engine模块中)获取里面所有step配置,可以在环境变量中设置“KETTLE_CORE_STEPS_FILE”来覆盖默认的kettle-steps.xml;然后,调用registerPluginFromXmlResource(),解析出step所有的属性,根据属性构造出来个Plugin对象;接着,把该插件信息保存到pluginMapcategoryMap对应插件类型的value(List)中;最后 ,触发该插件类型的添加、改变插件的事件 。
    2. registerPluginJars():根据jar包注册插件(通过注解方释来描述插件)。首先,Windows下先会默认从[plugins, plugins\steps, C:\Users\Administrator\.kettle\plugins, C:\Users\Administrator\.kettle\plugins\steps]这几个目录中查找StepPluginType类型的插件jar包;然后,调用handlePluginAnnotation():通过注解解析出所有插件相关的描述属性,并构造Plugin对象;接着,把该插件信息保存到pluginMapcategoryMap对应插件类型的value(List)中;最后 ,触发该插件类型的添加、改变插件的事件 。
    3. registerXmlPlugins():根据xml配置文件注册插件。首先,Windows下先会默认从[plugins, plugins\steps, C:\Users\Administrator\.kettle\plugins, C:\Users\Administrator\.kettle\plugins\steps]这几个目录中查找StepPluginType类型插件的配置文件:xxxplugin.xml;然后,解析<plugin>节点内容,并调用registerPluginFromXmlResource(),解析出step所有的属性,根据属性构造出来个Plugin对象;接着,把该插件信息保存到pluginMapcategoryMap对应插件类型的value(List)中;最后 ,触发该插件类型的添加、改变插件的事件 。
  4. 还可以从环境变量中读取“KETTLE_PLUGIN_CLASSES”的值,从中加载指定的插件,该方法对调试模式非常有利,可以通过在eclipse中启动spoon时添加VM arguments:
    DKETTLE_PLUGIN_CLASSES=org.pentaho.di.trans.steps.gpload.GPLoadMeta,org.pentaho.di.core.database.PALODatabaseMeta  //以逗号隔开

 3.流程图

技术分享

kettle插件加载流程

标签:

原文地址:http://www.cnblogs.com/czm1032851561/p/5789279.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!