kettle系列-2.kettle源碼結構分析


      kettle是一個開源產品,產品本身設計是很優秀的,代碼應該是很多開源愛好者用業余時間貢獻的,代碼整體結構還是比較容易理解的,但具體到每一個控件內部就因人而異了,感覺還是挺復雜的,肯定別人考慮得比較全面。但因為是開源產品,不像商業產品那樣完善,測試、具體代碼規范等就沒有商業產品嚴格了,所以bug相對較多什么的都是可以理解的,后面會將我遇到的部分bug及修復方式分享出來。

      上一篇文章我們導入了5個項目,是我認為修改使用過程中遇到的bug時可能需要用到的項目,相信通過上一篇文章的介紹很容易就能添加其他模塊的代碼進來,需要再添加吧。下圖是各模塊的簡介:

       

       我修改過代碼的就只有engine和ui,我遇到的bug基本都是在這兩個層面上的,core里面的database倒是也看了一下。除了代碼,還需要了解package-res/ui這個文件夾里的內容,這里面的xul文件就是界面布局的xml,菜單層次、對應的i18n鍵、菜單對應代碼中哪個方法等都在這里面配置的。里面的images就是圖標了,你可以替換為你喜歡的圖標,ui里面有多個布局文件,想了解單擊了界面某個菜單具體的代碼實現時就到這里面找,根據需要看吧,ui文件夾內容如:

       

      玩kettle主要就是創建作業(job)和轉換(transition),作業和轉換有着各自不同的控件,作業的特點是依次運行作業中的各個控件,而轉換是多線程同時運行轉換中的各個控件,轉換就像工廠流水線,很多工人同時都在工作,一件產品經一個工人處理后轉交給下一個工人,然后這個工人繼續處理下一產品,產品就是我們的數據流,一條一條的數據記錄,如excel中的數據入到數據庫中,我們需要excel輸入和表輸出兩個轉換控件,這就是流水線上的兩個工人,excel輸入讀取excel文件,依次讀取里面的數據行,一行一行的將excel中的數據傳給表輸出控件,表輸出控件這個工人同時也在工作,一旦excel輸入傳來數據,他馬上就開始往數據庫中寫。而作業就沒有數據流的概念,不會源源不斷的接收上一個作業控件傳來的數據,如我們從ftp上下載文件然后通過一個轉換處理下載下來的文件,需要先把文件下載完成才能開始后續處理工作,不能邊下載邊處理,所以ftp下載和轉換都是作業控件。所有作業控件和轉換控件才是我們要研究的主角,玩kettle基本都是和他們打交道。

      每個控件又分為某一項技能和某一個人,一個人擁有某項技能以后就是我們的一個控件了,我們可以對每個控件進行各項設置,就像可以告訴這個人今天具體做什么工作,我們可以同時拖多個相同類型的控件,就像可以有多個人擁有相同的技能。類似的就是ftp下載作業控件和excel輸入轉換控件,后面會以這兩個控件為例子介紹作業控件和轉換控件。每個控件對應的技能的實現就在engine項目中,人的實現ui項目中。

      如下就是FTP下載控件的技能實現,每個作業控件都能在engine項目的org.pentaho.di.job.entries包下面找到技能實現,類似的轉換控件能在engine項目的org.pentaho.di.trans.steps包下面找到技能實現,job運行起來具體怎么處理數據的就能在這里看到。

      

      如下是FTP下載控件的ui層實現,主要用於配置控件參數,每個作業控件都能在ui項目的org.pentaho.di.ui.job.entries包下找到ui層實現,類似的轉換控件也能在ui項目的org.pentaho.di.ui.trans.steps包下找到ui層實現。

       

      通過上面的介紹我們可以知道,在界面配置有問題在ui項目看實現,運行中出錯,找問題在engine項目中找。作業控件一般屬性和業務邏輯都在一個類中,轉換控件一般會分為*Data、*Meta和一個業務實現類、若干相關工具類。Data用於保存運行數據,Meta用於保存配置元數據,有與資源庫交互的實現。

      源碼分析差不多就到這里了,有問題能快速定位到具體代碼,然后就是考驗java功底的時候了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM