kettle源码分析之4 osgi与插件开发

2024-09-02 12:18

本文主要是介绍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与插件开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129930

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部