kettle中java组件_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上那個項目中獲取,下面介紹下基于該插件開發實現自己業務的插件。
在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类控件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 抛出403_java.io.I
- 下一篇: java随机数去重排序_数组去重及排序/