kettle中java组件_kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件
該kettle插件功能類似kettle現(xiàn)有的定義java類插件,自定java類插件主要是支持在kettle中直接編寫java代碼實(shí)現(xiàn)自定特殊功能,而本控件主要是將自定義代碼轉(zhuǎn)移到j(luò)ar包,就是說(shuō)自定義功能的實(shí)現(xiàn)改為在eclipse等ide中開發(fā)。
設(shè)計(jì)本插件的原因是直接在kettle中寫java代碼是很不容易的事,開發(fā)體驗(yàn)與eclipse差得遠(yuǎn),java語(yǔ)法還要受到限制,調(diào)試麻煩。實(shí)現(xiàn)點(diǎn)簡(jiǎn)單的邏輯還行,稍微復(fù)雜一點(diǎn)就比較麻煩,需要對(duì)java和kettle相關(guān)接口很熟悉。而簡(jiǎn)單的功能可以采用javascript腳本實(shí)現(xiàn),復(fù)雜的功能一般人很難直接在自定義java類控件中編寫java實(shí)現(xiàn)。
有人說(shuō)可以每次直接開發(fā)新插件,雖然說(shuō)java的插件機(jī)制還是很不錯(cuò)的,但開發(fā)一個(gè)插件還是沒那么容易的,需要設(shè)計(jì)元數(shù)據(jù),插件件功能實(shí)現(xiàn),插件操作界面設(shè)計(jì)等,其中操作界面的調(diào)整是我最不愿意花時(shí)間的,慢慢調(diào)我也能調(diào)出常見控件的配置界面,但我覺得沒必要,所以要實(shí)現(xiàn)一個(gè)完善的插件需要做的事情還是很多的。
而本插件綜合了以上兩種機(jī)制,既有自定義java類的簡(jiǎn)單性,直接編寫核心業(yè)務(wù)代碼,操作界面統(tǒng)一使用一個(gè)JSON對(duì)象作為參數(shù)設(shè)置途徑,所以基于此開發(fā)功能,只需繼承一個(gè)基類而編寫一個(gè)功能實(shí)現(xiàn)類就可以了;又有直接開發(fā)插件的便捷性,只需將相關(guān)的jar包作為用戶類庫(kù)導(dǎo)入項(xiàng)目,創(chuàng)建一個(gè)類,繼承基類,就可以在eclipse中盡情的編寫你的業(yè)務(wù)代碼了。
該插件已經(jīng)作為我的另一個(gè)開源項(xiàng)目kettle管理平臺(tái)(http://www.cnblogs.com/majinju/p/5739820.html)的一個(gè)子項(xiàng)目開源,相關(guān)代碼可以從github上那個(gè)項(xiàng)目中獲取,下面介紹下基于該插件開發(fā)實(shí)現(xiàn)自己業(yè)務(wù)的插件。
在eclipse中創(chuàng)建用戶類庫(kù)ku,到kettle管理平臺(tái)項(xiàng)目介紹的博文中下載0.1.0版部署包,然后將部署包的lib目錄中的jar全部加入。
在eclipse中創(chuàng)建一個(gè)java項(xiàng)目,添加上一步創(chuàng)建的用戶類庫(kù)到構(gòu)建路徑,然后新建一個(gè)java類,以下是轉(zhuǎn)換步驟實(shí)現(xiàn)代碼樣例。
/*** 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 運(yùn)行示例
* date: 2016年6月29日
*@authorjingma
*@version
*/
public class KurDemo extendsKettleUtilRunBase{/*** 具體處理每一行數(shù)據(jù)
*@seenet.oschina.kettleutil.KettleUtilRunBase#disposeRow(java.lang.Object[])*/@Overrideprotected voiddisposeRow(Object[] outputRow) {//設(shè)置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("數(shù)據(jù)處理結(jié)束");
}/***
*@seenet.oschina.kettleutil.KettleUtilRunBase#getDefaultConfigInfo(org.pentaho.di.trans.TransMeta, java.lang.String)*/@Overridepublic String getDefaultConfigInfo(TransMeta transMeta, String stepName) throwsException{//創(chuàng)建一個(gè)JSON對(duì)象,用于構(gòu)建配置對(duì)象,避免直接拼字符串構(gòu)建JSON字符串
JSONObject params = newJSONObject();//設(shè)置一個(gè)參數(shù)key1
params.put("key1", "");
RowMetaInterface fields=transMeta.getPrevStepFields(stepName);if(fields.size()==0){throw new RuntimeException("沒有獲取到上一步驟的字段,請(qǐng)確認(rèn)連接好上一步驟");
}
params.put("PrevInfoFields", fields.toString());//創(chuàng)建一個(gè)JSON數(shù)組對(duì)象,用于存放數(shù)組參數(shù)
JSONArray arr = newJSONArray();
arr.add("arr1");
arr.add("arr2");
params.put("array", arr);//生成的參數(shù)樣例//{//"array":[//"arr1",//"arr2"//],//"key1":""//}//返回格式化后的默認(rèn)JSON配置參數(shù),供使用者方便快捷的修改配置
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. 以下是作業(yè)實(shí)體插件實(shí)現(xiàn)樣例
/*** 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 運(yùn)行示例
* date: 2016年6月29日
*@authorjingma
*@version
*/
public class JeurDemo extendsJobEntryKettleUtilRunBase{/***
*@seenet.oschina.kettleutil.jobentry.JobEntryKettleUtilRunBase#run()*/@Overrideprotected boolean run() throwsException {//這里寫自己的業(yè)務(wù)
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{//創(chuàng)建一個(gè)JSON對(duì)象,用于構(gòu)建配置對(duì)象,避免直接拼字符串構(gòu)建JSON字符串
JSONObject params = newJSONObject();//設(shè)置一個(gè)參數(shù)key1
params.put("key1", "");//創(chuàng)建一個(gè)JSON數(shù)組對(duì)象,用于存放數(shù)組參數(shù)
JSONArray arr = newJSONArray();
arr.add("arr1");
arr.add("arr2");
params.put("array", arr);//生成的參數(shù)樣例//{//"array":[//"arr1",//"arr2"//],//"key1":""//}//返回格式化后的默認(rèn)JSON配置參數(shù),供使用者方便快捷的修改配置
return JSON.toJSONString(params, true);//return "select *\n from dual";
}
}
4. 開發(fā)完成后,打包放入kettle lib中,重啟kettle。以下是該插件配置界面,可以修改步驟名稱,在類名稱處填寫你的實(shí)現(xiàn)類的完整類路徑,然后就可以點(diǎn)擊【獲取默認(rèn)配置】按鈕,獲取你配置的實(shí)現(xiàn)類對(duì)應(yīng)的配置信息,根據(jù)需要修改即可完成配置。以下分別是轉(zhuǎn)換的插件實(shí)現(xiàn)示例和作業(yè)實(shí)體實(shí)現(xiàn)示例截圖。
以上就完成了基于該插件的開發(fā)使用工作,由上可以看出,執(zhí)行編寫一個(gè)類,就可以完成一個(gè)插件的開發(fā)工作。
總結(jié)
以上是生活随笔為你收集整理的kettle中java组件_kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 抛出403_java.io.I
- 下一篇: java随机数去重排序_数组去重及排序/