kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件

该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上那个项目中获取,下面介绍下基于该插件开发实现自己业务的插件。

  1. 在eclipse中创建用户类库ku,到kettle管理平台项目介绍的博文中下载0.1.0版部署包,然后将部署包的lib目录中的jar全部加入。
  2. 在eclipse中创建一个java项目,添加上一步创建的用户类库到构建路径,然后新建一个java类,以下是实现代码样例。
/**
* Project Name:KettleUtil
* Date:2016年6月29日下午4:58:19
* Copyright (c) 2016, jingma All Rights Reserved.
*/

package net.oschina.kettleutil.utilrun;

import net.oschina.kettleutil.KettleUtilRunBase;
import net.oschina.mytuils.KettleUtils;

import org.pentaho.di.core.row.RowMetaInterface;
import org.pentaho.di.core.row.ValueMeta;
import org.pentaho.di.core.variables.VariableSpace;
import org.pentaho.di.trans.step.StepMeta;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * kettle util 运行示例<br/>
 * date: 2016年6月29日 <br/>
 * @author jingma
 * @version
 */
public class kurDemo extends KettleUtilRunBase{
    /**
    * 具体处理每一行数据
    * @see net.oschina.kettleutil.KettleUtilRunBase#disposeRow(java.lang.Object[])
    */
    @Override
    protected void disposeRow(Object[] outputRow) {
        //设置JOB名称
        outputRow[getFieldIndex("JOB_NAME")] = KettleUtils.getRootJobName(ku);
    }
    /**
    *
    * @see net.oschina.kettleutil.KettleUtilRunBase#init()
    */
    @Override
    protected void init() {
        ku.logBasic("初始化插件");
    }
    /**
    *
    * @see net.oschina.kettleutil.KettleUtilRunBase#end()
    */
    @Override
    protected void end() {
        ku.logBasic("数据处理结束");
    }
    /**
    *
    * @see net.oschina.kettleutil.KettleUtilRunBase#getDefaultConfigInfo()
    */
    @Override
    public String getDefaultConfigInfo() {
        //创建一个JSON对象,用于构建配置对象,避免直接拼字符串构建JSON字符串
        JSONObject params = new JSONObject();
        //设置一个参数key1
        params.put("key1", "");
        //创建一个JSON数组对象,用于存放数组参数
        JSONArray arr = new JSONArray();
        arr.add("arr1");
        arr.add("arr2");
        params.put("array", arr);
        //生成的参数样例
        //{
        //  "array":[
        //          "arr1",
        //          "arr2"
        //  ],
        //  "key1":""
        //}
        //返回格式化后的默认JSON配置参数,供使用者方便快捷的修改配置
        return JSON.toJSONString(params, true);
    }

    public void getFields(RowMetaInterface r, String origin, RowMetaInterface[] info, StepMeta nextStep, VariableSpace space) {
        //添加输出到下一步的字段
        addField(r,"JOB_NAME",ValueMeta.TYPE_STRING,ValueMeta.TRIM_TYPE_BOTH,origin,"JOB名称");
    }
}

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

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

时间: 2024-12-17 23:54:35

kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件的相关文章

C#控件系列--文本类控件

C#控件系列--文本类控件 文本类控件主要包括Label.LinkLabel.Button.TextBox以及RichTextBox. Label 功能 Label用来显示用户不能直接改变的文本信息. 属性 Image--指定标签上显示的图像. Text--此属性是与文件相关联的文本. Name--标识对象的名称. AutoSize--如果此属性为true,则启用了根据字号自动调整大小.请注意,这只对文本不换行的标签控件有效. Enabled--是否启用该控件. Visible--可见还是隐藏.

类似web风格的 Winform 分页控件

背景 最近做一个Winform的小程序,需要用到分页,由于之前一直在用 TonyPagerForWinForm.dll ,但该库没有源代码,网上找的也不全面,索性就准备自己改造一个.在园子里翻了一下,发现路过秋天在多年前写了个分页控件,Winform 通用分页控件实战篇(提供源码下载).站在大神的肩膀上就是快,一会就改好了. 效果图 功能比较齐全,不过样式上,楼主十分喜欢easyUI或ext的列表分页风格.于是换了几个按钮,添加了图标,看看现在的效果. 控件源码在正文最下方. 使用简介 就那么一

C#控件系列--选择类控件

C#控件系列--选择类控件 选择类控件主要包括:ComboBox.CheckBox.CheckedListBox.RadioButton.NumericUpDown以及ListBox. ComboBox 功能 ComboBox控件用于在下拉组合框中显示数据,它结合了TextBox控件和ListBox控件的功能. 属性

从零开始学_JavaScript_系列(九)——dojo(2)(AJAX、时间控件、鼠标事件、样式修改、事件移除、消息发布订阅)

(21)和(22)写的不好,跳过. (23)AJAX异步加载 插件:dojo/request 参数:request 语法(get): request.get(URL).then(成功回调函数,失败回调函数); 第一个回调函数是成功的,参数用response:(也可以用其他的) 第二个回调函数是失败的,参数用error:(也可以用其他的) 注: ①读取本地比较简单,直接填写本地的url即可: ②如果读取服务器端(比如数据库),那么需要相应的支持,例如python脚本等(我自己目前对python.和

CAD控件,CAD插件使用教程:Android开发使用控件--开发环境的搭建

Android开发使用控件入门--环境搭建 2014-12-24 09:57     14人阅读     评论(0)     收藏         编辑     删除 CAD控件.CAD三维控件,手机控件 Android开发控件 软件名称(,梦,,想.CAD  ,控件) 1. 环境搭建: 3 1.1. 安装Eclipse 3 1.2. 下载JDK 3 1.3. 下载Android SDK 5 1.4. 给Eclipse 安装ADT插件  8 1.5. 运行Eclipse设置Android ADT

RadioGroup实现类似ios的分段选择(UISegmentedControl)控件

在ios7中有一种扁平风格的控件叫做分段选择控件UISegmentedControl,控件分为一排,横放着几个被简单线条隔开的按钮,每次点击只能选择其中一个按钮,他类似于tabbar但是又稍微有点区别,新版的qq手机客户端就用到了这种控件. 但是在android中并没有现成的控件可用,不过android中有着功能类似但UI相差很大的RadioGroup控件,可以通过定义RadioGroup的外观来达到相同的目的.其实android中也没有TabBar,但是很多app通过修改RadioGroup来

完善分页插件,增加内部成员,确定控件是否已经初始化过一次。

//代码整理:懒人之家 www.lanrenzhijia.com//分页插件/**2014-08-05 ch2016-07-19 Modified By RenGuoQiang**/(function($){ var ms = { init:function(obj,args){ return (function(){ ms.fillHtml(obj,args); ms.bindEvent(obj,args); })(); }, //填充html fillHtml:function(obj,ar

ADF_Oracle示例系列10_使用 JDeveloper 11g 通过 Web 服务创建数据控件(案例)

2013-05-01 Created By BaoXinjian 一.摘要 待整理 待整理 待整理 待整理 待整理 待整理 Thanks and Regards

《Flutter 动画系列二》Google工程师带你选择Flutter动画控件

对初学者来说,看完这篇文章,我想你脑瓜子一定是嗡嗡的,这都说的是什么啊. 不要急躁,开始的我和你是一样的,第一遍看完,完全不知道在说什么,不明白不要紧,请先收藏此文章,然后先去学习下Flutter内置的25种动画组件. 地址:http://laomengit.com/flutter/module/animated_1/. 不要仅仅是看,要多写,只有写才能发现问题. 当你对动画控件有了一定的了解,在回过头来细细的品一品这篇文章,你会有不一样的感受,你品,你细品. 这篇文章的内容是Google 的F