该kettle插件功能类似kettle现有的定义java类插件,自定java类插件主要是支持在kettle中直接编写java代码实现自定特殊功能,而本控件主要是将自定义代码转移到jar包,就是说自定义功能的实现改为在eclipse等ide中开发。

设计本插件的原因是直接在kettle中写java代码是很不容易的事,开发体验与eclipse差得远,java语法还要受到限制,调试麻烦。实现点简单的逻辑还行,稍微复杂一点就比较麻烦,需要对java和kettle相关接口很熟悉。而简单的功能可以采用javascript脚本实现,复杂的功能一般人很难直接在自定义java类控件中编写java实现。

有人说可以每次直接开发新插件,虽然说java的插件机制还是很不错的,但开发一个插件还是没那么容易的,需要设计元数据,插件件功能实现,插件操作界面设计等,其中操作界面的调整是我最不愿意花时间的,慢慢调我也能调出常见控件的配置界面,但我觉得没必要,所以要实现一个完善的插件需要做的事情还是很多的。

而本插件综合了以上两种机制,既有自定义java类的简单性,直接编写核心业务代码,操作界面统一使用一个JSON对象作为参数设置途径,所以基于此开发功能,只需继承一个基类而编写一个功能实现类就可以了;又有直接开发插件的便捷性,只需将相关的jar包作为用户类库导入项目,创建一个类,继承基类,就可以在eclipse中尽情的编写你的业务代码了。

该插件已经作为我的另一个开源项目kettle管理平台(http://www.cnblogs.com/majinju/p/5739820.html)的一个子项目开源,相关代码可以从github上那个项目中获取,下面介绍下基于该插件开发实现自己业务的插件。

在eclipse中创建用户类库ku,到kettle管理平台项目介绍的博文中下载0.1.0版部署包,然后将部署包的lib目录中的jar全部加入。

在eclipse中创建一个java项目,添加上一步创建的用户类库到构建路径,然后新建一个java类,以下是转换步骤实现代码样例。

/*** Project Name:KettleUtil

* Date:2016年6月29日

* Copyright (c) 2016, jingma All Rights Reserved.*/

packagenet.oschina.kettleutil.utilrun;importnet.oschina.kettleutil.KettleUtilRunBase;importnet.oschina.mytuils.KettleUtils;importorg.pentaho.di.core.row.RowMetaInterface;importorg.pentaho.di.core.row.ValueMeta;importorg.pentaho.di.core.variables.VariableSpace;importorg.pentaho.di.trans.TransMeta;importorg.pentaho.di.trans.step.StepMeta;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;/*** kettle util 运行示例

* date: 2016年6月29日

*@authorjingma

*@version

*/

public class KurDemo extendsKettleUtilRunBase{/*** 具体处理每一行数据

*@seenet.oschina.kettleutil.KettleUtilRunBase#disposeRow(java.lang.Object[])*/@Overrideprotected voiddisposeRow(Object[] outputRow) {//设置JOB名称

outputRow[getFieldIndex("JOB_NAME")] =KettleUtils.getRootJobName(ku);

}/***

*@seenet.oschina.kettleutil.KettleUtilRunBase#init()*/@Overrideprotected voidinit() {

ku.logBasic("初始化插件");

}/***

*@seenet.oschina.kettleutil.KettleUtilRunBase#end()*/@Overrideprotected voidend() {

ku.logBasic("数据处理结束");

}/***

*@seenet.oschina.kettleutil.KettleUtilRunBase#getDefaultConfigInfo(org.pentaho.di.trans.TransMeta, java.lang.String)*/@Overridepublic String getDefaultConfigInfo(TransMeta transMeta, String stepName) throwsException{//创建一个JSON对象,用于构建配置对象,避免直接拼字符串构建JSON字符串

JSONObject params = newJSONObject();//设置一个参数key1

params.put("key1", "");

RowMetaInterface fields=transMeta.getPrevStepFields(stepName);if(fields.size()==0){throw new RuntimeException("没有获取到上一步骤的字段,请确认连接好上一步骤");

}

params.put("PrevInfoFields", fields.toString());//创建一个JSON数组对象,用于存放数组参数

JSONArray arr = newJSONArray();

arr.add("arr1");

arr.add("arr2");

params.put("array", arr);//生成的参数样例//{//"array":[//"arr1",//"arr2"//],//"key1":""//}//返回格式化后的默认JSON配置参数,供使用者方便快捷的修改配置

return JSON.toJSONString(params, true);

}public voidgetFields(RowMetaInterface r, String origin, RowMetaInterface[] info, StepMeta nextStep, VariableSpace space) {//添加输出到下一步的字段

addField(r,"JOB_NAME",ValueMeta.TYPE_STRING,ValueMeta.TRIM_TYPE_BOTH,origin,"JOB名称");

}

}

3. 以下是作业实体插件实现样例

/*** Project Name:KettleUtil

* Date:2016年6月29日

* Copyright (c) 2016, jingma All Rights Reserved.*/

packagenet.oschina.kettleutil.utilrun;importnet.oschina.kettleutil.jobentry.JobEntryKettleUtilRunBase;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;/*** job entry kettle util 运行示例

* date: 2016年6月29日

*@authorjingma

*@version

*/

public class JeurDemo extendsJobEntryKettleUtilRunBase{/***

*@seenet.oschina.kettleutil.jobentry.JobEntryKettleUtilRunBase#run()*/@Overrideprotected boolean run() throwsException {//这里写自己的业务

jeku.logBasic(jeku.getConfigInfo());

jeku.logBasic(configInfo.toJSONString());return true;

}/***

*@seenet.oschina.kettleutil.KettleUtilRunBase#getDefaultConfigInfo(org.pentaho.di.trans.TransMeta, java.lang.String)*/@Overridepublic String getDefaultConfigInfo() throwsException{//创建一个JSON对象,用于构建配置对象,避免直接拼字符串构建JSON字符串

JSONObject params = newJSONObject();//设置一个参数key1

params.put("key1", "");//创建一个JSON数组对象,用于存放数组参数

JSONArray arr = newJSONArray();

arr.add("arr1");

arr.add("arr2");

params.put("array", arr);//生成的参数样例//{//"array":[//"arr1",//"arr2"//],//"key1":""//}//返回格式化后的默认JSON配置参数,供使用者方便快捷的修改配置

return JSON.toJSONString(params, true);//return "select *\n from dual";

}

}

4. 开发完成后,打包放入kettle lib中,重启kettle。以下是该插件配置界面,可以修改步骤名称,在类名称处填写你的实现类的完整类路径,然后就可以点击【获取默认配置】按钮,获取你配置的实现类对应的配置信息,根据需要修改即可完成配置。以下分别是转换的插件实现示例和作业实体实现示例截图。

以上就完成了基于该插件的开发使用工作,由上可以看出,执行编写一个类,就可以完成一个插件的开发工作。

kettle中java组件_kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件相关推荐

  1. android自定义view获取控件,android 自定义控件View在Activity中使用findByViewId得到结果为null...

    转载:http://blog.csdn.net/xiabing082/article/details/48781489 1.  大家常常自定义view,,然后在xml 中添加该view 组件..如果在 ...

  2. Android在Activity中动态增加xml自定义样式布局控件(引用xml布局文件和循环增加控件)

    工程目录: MainActivity package com.example.test1121;import androidx.appcompat.app.ActionBar; import andr ...

  3. 细说 Angular 的自定义表单控件 (赞,实用、日期组件)

    原文出处:https://m.imooc.com/article/19369  (应该是<Angular从零到一>作者) 我们在构建企业级应用时,通常会遇到各种各样的定制化功能,因为每个企 ...

  4. Winform中实现自定义水晶按钮控件(附代码下载)

    场景 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建一个用户 ...

  5. C#:C#控件系列四(列表类控件)

    列表类控件 1. ListBox 控件: ListBox控件又称列表框,它在工具箱中的图标为,它显示一个项目列表供用户选择. 在列表框中,用户一次可以选择一项,也可以选择多项. 1.1. 常用属性: ...

  6. C#在控件中绘制矩形、圆、线段等(切换不同的图片,自定义翻页控件,通过委托监控某个字段)

    1.效果展示 2 自定义翻页控件 public partial class PageManagemen : UserControl{/// <summary>/// 当前页(从1开始计数) ...

  7. 在主窗口中增加绘图类控件时(以QPainter为例)时不显示内容的问题(不应该加addStretch)

    问题引出 假如我要实现以下GUI,包含一个主窗口,主窗口内又包含1个绘图类控件(QPainter中的QdrawText)和1个 单行文本框控件(QLineEdit). 期望效果图 开始实现的代码为: ...

  8. 用MVVM模式开发中遇到的零散问题总结(4)——自制摄像头拍摄大头贴控件

    原文: 用MVVM模式开发中遇到的零散问题总结(4)--自制摄像头拍摄大头贴控件 一直有个疑问,为什么silverlight对摄像头支持这么好,WPF却一个库都没有....于是我各种苦恼啊,各种Cod ...

  9. Java面试宝典系列之基础面试题String、变量、类与对象、集合类、SSH(一)

    作者:egg 邮箱:xtfggef@gmail.com 微博:http://weibo.com/xtfggef 博客:http://blog.csdn.net/zhangerqing(转载请说明出处) ...

最新文章

  1. [转载] 信息系统项目管理师考试论文写作要点
  2. ADO.NET中连接池状态的跟踪
  3. editplus的配置和使用
  4. winform 系统托盘程序
  5. 第三届《麻省理工科技评论》EmTech China峰会召开,全球新兴科技智慧风暴席卷京城
  6. 星界边境服务器Linux,星界边境 保护与密码锁 服务器插件Mod
  7. Django 上下文处理器
  8. [转]关于SilverLight:你需要知道的十件事情
  9. 雨听|生成mac风格代码块
  10. 2020省赛第八次训练赛题解
  11. 《淘宝技术这十年》之LAMP架构的网站
  12. html+js 实现 推箱子 贪吃蛇和简单的飞机大战
  13. 计算机图形学实战——Bresenham直线光栅化算法绘制旋转线
  14. 固态硬盘(SSD) 和机 械硬盘(HDD) 优缺点比较
  15. UE4-(雾效)大气雾
  16. 杂谈——如何合并两个有序链表(时间复杂度为O(n))
  17. 小小知识点(三十七)OFDM和OFDMA的区别以及OFDMA与SC-FDMA的区别
  18. 皮秒 纳秒 微秒 毫秒 秒 ps、ns、us、ms、s 时间单位之间的换算
  19. 给媳妇做一个记录心情的小程序
  20. 金蝶eas系统服务器端口,金蝶eas服务器端设置

热门文章

  1. MySQL带ALL关键字的子查询
  2. 拍卖源码java_Java并发的AQS原理详解
  3. left join 临时表_不懂SQL优化?那你就OUT了——表连接的优化
  4. 【前端模块】css基础
  5. 判断机器学习算法或深度学习算法优势常考虑的点
  6. 字节跳动P0级事故:实习生删除GB以下所有模型,直接上了今日头条......
  7. 公司用的 MySQL 团队开发规范,非常详细,建议收藏!
  8. maven实战总结,工作中常见操作
  9. 硬刚一周,3W字总结,一年的经验告诉你如何准备校招,拿大厂offer
  10. java语言基础及集合基础大总结