本文主要是介绍kettle源码分析之4 osgi与插件开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 简介
- 使用
- 注册
- 查找服务
- 插件
- 数据库插件
- step
- job
https://wiki.pentaho.com/display/EAI/OSGI+in+Kettle
https://www.oreilly.com/library/view/building-modular-cloud/9781449345143/
简介
对于kettle的插件系统可以看一下上面连接的文档。大意是:kettle引入OSGI来消除xml配置的内置插件和基于注解/xml的jar插件,尽可能的减少制定代码。
OSGi并不是一个新技术,eclipse就是一个非常好的范例。不过kettle的OSGi实践中并没有完全使用现有的标准技术。
使用
注册
PluginTracker.getInstance().registerPluginClass(Class);
// 添加监听器
PluginTracker.getInstance().addPluginLifecycleListener(Class, PluginLifecycleListener)
通过插件类型能够找到Services和Bean
查找服务
需要注意的是服务应该是无状态的,避免共同引用一个服务造成属性混淆。
PluginTracker.getInstance().getServiceObject(Class serviceClassType, Map serviceProps, [optional] boolean doProxy);
默认情况下Services是被代理的,并有个动态生命周期。一个bundle服务可以被停止,重启或者被替换。
PluginTracker.getInstance().addServiceReferenceListener(Object serviceObject, ServiceReferenceListener listener);
从插件中获取bean实例有2种方式:
- 提供可以定位BeanFactory的may如 pluginID
- 通过来自这个bundle中的service实例获取
PluginTracker.getInstance().getBean(Class beanType, Map beanFactoryProps, String beanID);
PluginTracker.getInstance().getBean(Class beanType, Object serviceObject, String beanID);
知道了如何从kettle中获取bean,那么下面开始进入到最关心的问题如何进行插件开发:
插件
为了实现一个kettle插件,最起码需要实现4个接口:
StepMetaInterface: it defines the metadata and takes care of XML representation, saving loading from/to repository, checks, etc.
StepInterface: makes the step execute: inherit from BaseStep to make your life easier.
StepDataInterface: holds open cursors, resultsets, files, etc.
StepDialogInterface: GUI/dialog code to edit the meta-data
类名最好按照kettle的规范,元数据类Meta结束,对话框以Dialog结束,并且有相同的前缀。
创建插件:
- 文件夹:plugins/transformations/steps/SomePlugin.
- 创建文件:someplugin.jar, plugin.xml, someplugin.png
- debug插件
启动Spoon,添加:-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044
IDE创建一个remote configuration
数据库插件
作用:
- 构建连接字符串
- 将连接设置给JDBC
- 创建SQL方言
- 检测JDBC驱动的特殊能力和限制
step
job
这篇关于kettle源码分析之4 osgi与插件开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!