當前位置:首頁 » 編程軟體 » kettle源碼編譯

kettle源碼編譯

發布時間: 2024-03-26 15:03:31

① kettle 源碼 怎麼運行"repositories"插件

1.2. 編譯源碼
項目載入eclipse
kettle項目拷貝eclipseworkspace目錄eclipse新建java project項目名稱拷貝kettle文件夾名稱致

項目導入eclipse現錯誤圖文件源碼全部注釋掉

編譯
打build.xml, 右邊Outline 點擊kettle->run as ->ant build

第編譯候需要網載幾文件放C:\Documents and Settings\Administrator\.subfloor網路載比較慢直接文件放C:\Documents and Settings\Administrator\編譯完bin目錄.bat文件拷貝Kettle目錄點擊Spoon.bat運行運行功代表編譯已近通
用源碼運行Spoon
Kettle源碼工程本身能linux64位機器調試swt配置linux64庫所運行源碼前需要修改win32swt步驟:工程à屬性àJava Build Pathàlibrariesàadd jars

linux64SWT庫刪除

打src-uiàorg.pentaho.di.ui.spoonàSpoon.java Run As àjava application
二.源碼析
2.1. 修改kettle界面
修改初始化界面
打package org.pentaho.di.ui.spoonSpoon.Java找main函數該main函數Spoon工具入口找語句

Splash splash = new Splash(display);

該語句spoon初始化顯示界面跳定義Splash.java面函數

canvas.addPaintListener(new PaintListener() {
publicvoid paintControl(PaintEvent e) {
String versionText = BaseMessages.getString(PKG, "SplashDialog.Version") + " " + Const.VERSION; //$NON-NLS-1$ //$NON-NLS-2$

StringBuilder sb = new StringBuilder();
String line = null;

try {
BufferedReader reader = new BufferedReader(newInputStreamReader(Splash.class.getClassLoader().getResourceAsStream("org/pentaho/di/ui/core/dialog/license/license.txt")));//$NON-NLS-1$

while((line = reader.readLine()) != null) {
sb.append(line + System.getProperty("line.separator")); //$NON-NLS-1$
}
} catch (Exception ex) {
sb.append(""); //$NON-NLS-1$
Log.warn(BaseMessages.getString(PKG, "SplashDialog.LicenseTextNotFound")); //$NON-NLS-1$
}

String licenseText = sb.toString();
e.gc.drawImage(kettle_image, 0, 0);

// If this is a Milestone or RC release, warn the user
if (Const.RELEASE.equals(Const.ReleaseType.MILESTONE)) {
versionText = BaseMessages.getString(PKG, "SplashDialog.DeveloperRelease") + " - " + versionText; //$NON-NLS-1$ //$NON-NLS-2$
drawVersionWarning(e);
} elseif (Const.RELEASE.equals(Const.ReleaseType.RELEASE_CANDIDATE)) {
versionText = BaseMessages.getString(PKG, "SplashDialog.ReleaseCandidate") + " - " + versionText; //$NON-NLS-1$//$NON-NLS-2$
}
elseif (Const.RELEASE.equals(Const.ReleaseType.PREVIEW)) {
versionText = BaseMessages.getString(PKG, "SplashDialog.PreviewRelease") + " - " + versionText; //$NON-NLS-1$//$NON-NLS-2$
}
elseif (Const.RELEASE.equals(Const.ReleaseType.GA)) {
versionText = BaseMessages.getString(PKG, "SplashDialog.GA") + " - " + versionText; //$NON-NLS-1$//$NON-NLS-2$
}

Font verFont = new Font(e.display, "Helvetica", 11, SWT.BOLD); //$NON-NLS-1$
e.gc.setFont(verFont);
e.gc.drawText(versionText, 290, 205, true);

// try using the desired font size for the license text
int fontSize = 8;
Font licFont = new Font(e.display, "Helvetica", fontSize, SWT.NORMAL); //$NON-NLS-1$
e.gc.setFont(licFont);

// if the text will not fit the allowed space
while (!willLicenseTextFit(licenseText, e.gc)) {
fontSize--;
licFont = new Font(e.display, "Helvetica", fontSize, SWT.NORMAL); //$NON-NLS-1$
e.gc.setFont(licFont);
}

e.gc.drawText(licenseText, 290, 290, true);
}
});

1. 修改背景圖片
找ui/image/面kettle_splash.png替換該圖片
2. 修改版本信息
找e.gc.drawText(versionText, 290, 205, true); 改e.gc.drawText("海康威視數據交換平台V1.0", 290, 205, true);
3. 修改面描述性文字
找e.gc.drawText(licenseText, 290, 290, true);改e.gc.drawText("作者:海康", 290, 290, true);
4. 預覽效

② kettle 實現列轉行,行專列,源碼如何debug跟蹤調試

本文主要記錄kettle列轉行控制項的使用。

1、用例腳本

create TABLE studentInfo
(
    studentno int,
    Cname varchar(10),
    grade int
);
insert into studentInfo values(2018100,'語文',81);
insert into studentInfo values(2018100,'數學',82);
insert into studentInfo values(2018100,'英語',83);

insert into studentInfo values(2018101,'語文',71);
insert into studentInfo values(2018101,'數學',71);
insert into studentInfo values(2018101,'英語',72);

insert into studentInfo values(2018102,'語文',91);
insert into studentInfo values(2018102,'數學',92);
insert into studentInfo values(2018102,'英語',93);

INSERT INTO studentInfo VALUES(2018103,'語文',60);
INSERT INTO studentInfo VALUES(2018103,'數學',61);
INSERT INTO studentInfo VALUES(2018103,'英語',94);
commit;
————————————————

③ 如何修改kettle slaveserver的最大連接數

背景

在使用ftp下載插件時,發現進行本地執行時可以正常,但當選擇了遠程執行並指定了遠程伺服器後發現出現了錯誤:從 FTP:User cannot log in. 獲取文件時發生錯誤。根據錯誤信息可以判斷是因為ftp登錄不上的原因,至於具體的原因無法定位,為了一探究竟,於是便萌生了調試遠程作業的想法,順便深入了解一下了解kettle運行原理以及源碼學習。

思路
carte伺服器實際上就是一個web server,該web server 是基於 Jetty 這個嵌入式的開源 servlet 容器。這個web server主要是提供轉換運行的環境,另外一個重要的功能通過提供servlet來在客戶端、主伺服器和從屬伺服器之間進行通訊和控制。主伺服器和從屬 伺服器之間是通過httpClient來進行通訊的,通訊時傳遞的數據是xml格式。通過提供的servlet,可以實現啟動、停止、暫停轉換或者作業、 獲得轉換或者作業的狀態、注冊子伺服器、獲得子伺服器的列表等等.
其實思路以及LZ使用的方法很簡單:通過java代碼在eclipse中啟動一個Carte伺服器,然後遠程執行作業時指定伺服器作為載體。
搭建Carte服務啟動環境
首先創建一個普通的java project項目,如果沒有kettle源碼環境的話可以創建maven project,這樣直接從中心倉庫上面獲得jar包以及源碼。剛好LZ之前有編譯過kettle源碼且已 經作為項目導入了eclipse中,所以 源碼以及相關kettle的jar包都已經有了。
創建了項目後,需要把相關的jar包加到java bulid path中,下面的jar包也可以從PDI工具的lib目錄下獲得:

把依賴包加入到項目中後,創建一個類來啟動Carte服務:
public class CarteServer {
publicstaticvoid main(String[] args) throws Exception {
SlaveServerConfig config =new SlaveServerConfig("192.168.31.43", 7088,true);//ip與埠與通過Carte.bat啟動時指定的參數一樣
Carte.runCarte(config); //通過該靜態方法啟動carte
}
}

開始遠程調試

1.啟動carte服務,建好CarteServer類後,直接debug as --> java application,即可啟動carte服務,在控制台可以看到以下信息:
2016/08/11 10:55:55 - Carte - 創建 web 服務監聽器 @ 地址: 192.168.31.43:7088
2016-08-11 10:55:55.912:INFO::jetty-6.1.26
2016-08-11 10:55:55.933:INFO::Started [email protected]:7088

2.打開spoon工具,創建一個job,下面的job是從ftp伺服器上下載文件:

3.因為作業用到了FTP下載插件,在源碼中對應JobEntryFTP類,打開該類並在execute()方法中打上斷點:


4.運行job,選擇遠程執行,選擇上述類CarteServer中啟動的伺服器(要先在spoon工具中新建一個子伺服器):

5.觀察斷點位置,看到已經進入了調試:

大功告成,至於ftp下載插件為什麼在遠程執行中錯誤另外說明。
遠程執行流程
用戶運行kettle作業並選擇「遠程執行」,觸發org.pentaho.di.job.Job類的sendToSlaveServer方法
在sendToSlaveServer方法中,首先生成XML格式的作業元數據描述。
調用SlaveServer的sendXML()方法把這些元數據會被發送到遠程的carte伺服器。
伺服器端AddJobServlet接收到請求後,進入doGet()方法通過元數據構造出Job實體並把作業保存到JobMap中。
在sendToSlaveServer方法中,把XML發送到carte伺服器後,接著調用SlaveServer的execService()方法進行啟動遠程的job
此時伺服器端StartJobServlet會接收到請求後,會給job(其實是一個Thread)做一堆初始化工作,最後調用job的start方法進行啟動。

④ kettle源碼在idea上部署運行時出錯

如果java_home設置了,下面可以不用設置,如果提示JVM不能正常啟動
Could not find themain class. Program will exit!
可以設置環境變數:pentaho_java_home,例如:C:\Program Files\Java\jdk1.7.0_79,其實就是你的java安裝目錄,1.6以上即可。windows下
如果啟動還報錯「could not create the Java virtual machine」,不是java虛擬機出了問題,修改一下spoon.bat里內存配置
if "%PENTAHO_DI_JAVA_OPTIONS%"=="" setPENTAHO_DI_JAVA_OPTIONS="-Xms2058m" "-Xmx1024m""-XX:MaxPermSize=256m"
改為
if "%PENTAHO_DI_JAVA_OPTIONS%"=="" setPENTAHO_DI_JAVA_OPTIONS="-Xms512m" "-Xmx512m" "-XX:MaxPermSize=256m"

⑤ java 怎麼設置kettle資料庫

java調用kettle資料庫類型資源庫中的ktr
此問題在1個月前或許已經接觸,單是一直木有怎麼用到,就被耽擱至今;問題的解決要來源於網路,其實我還想說問題的解決更多的是要靠我們自己的思想,不過多的言情,我們接下來直接進入主題吧!
環境:kettle-spoon 4.2.0,oracle11g,myeclipse6.5,sqlserver2008
前提:在kettle圖形界面spoon裡面已經做好了一個ktr轉換模型,此時我的ktr信息如下圖:

Step1:在myeclipse創建project,導入kettle集成所需要的包

Step2:重點解析與code源碼
//定義ktr名字
private static String transName = "test1";
//初始化kettle環境
KettleEnvironment.init();
//創建資源庫對象,此時的對象還是一個空對象
KettleDatabaseRepository repository = new KettleDatabaseRepository();
//創建資源庫資料庫對象,類似我們在spoon裡面創建資源庫
DatabaseMeta dataMeta =
new DatabaseMeta("enfo_bi","Oracle","Native","ip","sid","port","username","password");
//資源庫元對象,名稱參數,id參數,描述等可以隨便定義
KettleDatabaseRepositoryMeta kettleDatabaseMeta =
new KettleDatabaseRepositoryMeta("enfo_bi", "enfo_bi", "king description",dataMeta);
//給資源庫賦值
repository.init(kettleDatabaseMeta);
//連接資源庫
repository.connect("admin","admin");
//根據變數查找到模型所在的目錄對象
RepositoryDirectoryInterface directory = repository.findDirectory("/enfo_worker/wxj");
//創建ktr元對象
TransMeta transformationMeta = ((Repository) repository).loadTransformation(transName, directory, null, true, null ) ;
//創建ktr
Trans trans = new Trans(transformationMeta);
//執行ktr
trans.execute(null);
//等待執行完畢
trans.waitUntilFinished();

上面的兩個步驟才可以確定是資源庫中的那個路徑下的ktr和我們用命令執行一樣的-dir ,-tran -job
附上源碼:

package kettle;
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.repository.RepositoryDirectoryInterface;
import org.pentaho.di.repository.kdr.KettleDatabaseRepository;
import org.pentaho.di.repository.kdr.KettleDatabaseRepositoryMeta;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;
/**
* <p>Title: java調用kettle4.2資料庫型資料庫中的轉換</p>
* <p>Description: </p>
* <p>Copyright: Copyright () 2012</p>
*/
public class ExecuteDataBaseRepTran {

private static String transName = "test1";

public static void main(String[] args) {

try {
//初始化kettle環境
KettleEnvironment.init();
//創建資源庫對象,此時的對象還是一個空對象
KettleDatabaseRepository repository = new KettleDatabaseRepository();
//創建資源庫資料庫對象,類似我們在spoon裡面創建資源庫
DatabaseMeta dataMeta =
new DatabaseMeta("enfo_bi","Oracle","Native","ip","sid","port","username","password");
//資源庫元對象,名稱參數,id參數,描述等可以隨便定義
KettleDatabaseRepositoryMeta kettleDatabaseMeta =
new KettleDatabaseRepositoryMeta("enfo_bi", "enfo_bi", "king description",dataMeta);
//給資源庫賦值
repository.init(kettleDatabaseMeta);
//連接資源庫
repository.connect("admin","admin");
//根據變數查找到模型所在的目錄對象,此步驟很重要。
RepositoryDirectoryInterface directory = repository.findDirectory("/enfo_worker/wxj");
//創建ktr元對象
TransMeta transformationMeta = ((Repository) repository).loadTransformation(transName, directory, null, true, null ) ;
//創建ktr
Trans trans = new Trans(transformationMeta);
//執行ktr
trans.execute(null);
//等待執行完畢
trans.waitUntilFinished();

if(trans.getErrors()>0)
{
System.err.println("Transformation run Failure!");
}
else
{
System.out.println("Transformation run successfully!");
}
} catch (KettleException e) {
e.printStackTrace();
}
}

}

⑥ 如何使用kettle源碼更改spoon的東西

1.2. 編譯源碼
將項目載入到eclipse
將kettle項目拷貝到eclipse的workspace目錄下,在eclipse中新建java project,項目名稱和你拷貝過來的kettle文件夾名稱一致

項目導入到eclipse中會出現一個錯誤,如下圖,將這個文件的源碼全部注釋掉

編譯
打開build.xml, 在右邊的。Outline 點擊kettle->run as ->ant build

第一次編譯的時候需要從網上下載幾個文件,放在C:\Documents and Settings\Administrator\.subfloor,網路不好的話下載會比較慢,也可以直接文件放在C:\Documents and Settings\Administrator\下。編譯完成後將bin目錄下的.bat文件拷貝到Kettle目錄下點擊Spoon.bat運行,運行成功代表編譯已近通過
用源碼運行Spoon
Kettle源碼工程本身可能是在linux64位機器上調試的,swt配置是linux64的庫,所有在運行源碼前需要修改成win32的swt,步驟如下:工程à屬性àJava Build Pathàlibrariesàadd jars

然後將linux64的SWT庫刪除

最後打開src-uiàorg.pentaho.di.ui.spoonàSpoon.java, Run As àjava application
二.源碼分析
2.1. 修改kettle界面
修改初始化界面
打開package org.pentaho.di.ui.spoon的Spoon.Java,找到main函數,該main函數為Spoon工具的入口,找到如下語句

Splash splash = new Splash(display);

該語句為spoon初始化顯示的界面,跳到定義Splash.java,下面函數

canvas.addPaintListener(new PaintListener() {
publicvoid paintControl(PaintEvent e) {
String versionText = BaseMessages.getString(PKG, "SplashDialog.Version") + " " + Const.VERSION; //$NON-NLS-1$ //$NON-NLS-2$

StringBuilder sb = new StringBuilder();
String line = null;

try {
BufferedReader reader = new BufferedReader(newInputStreamReader(Splash.class.getClassLoader().getResourceAsStream("org/pentaho/di/ui/core/dialog/license/license.txt")));//$NON-NLS-1$

while((line = reader.readLine()) != null) {
sb.append(line + System.getProperty("line.separator")); //$NON-NLS-1$
}
} catch (Exception ex) {
sb.append(""); //$NON-NLS-1$
Log.warn(BaseMessages.getString(PKG, "SplashDialog.LicenseTextNotFound")); //$NON-NLS-1$
}

String licenseText = sb.toString();
e.gc.drawImage(kettle_image, 0, 0);

// If this is a Milestone or RC release, warn the user
if (Const.RELEASE.equals(Const.ReleaseType.MILESTONE)) {
versionText = BaseMessages.getString(PKG, "SplashDialog.DeveloperRelease") + " - " + versionText; //$NON-NLS-1$ //$NON-NLS-2$
drawVersionWarning(e);
} elseif (Const.RELEASE.equals(Const.ReleaseType.RELEASE_CANDIDATE)) {
versionText = BaseMessages.getString(PKG, "SplashDialog.ReleaseCandidate") + " - " + versionText; //$NON-NLS-1$//$NON-NLS-2$
}
elseif (Const.RELEASE.equals(Const.ReleaseType.PREVIEW)) {
versionText = BaseMessages.getString(PKG, "SplashDialog.PreviewRelease") + " - " + versionText; //$NON-NLS-1$//$NON-NLS-2$
}
elseif (Const.RELEASE.equals(Const.ReleaseType.GA)) {
versionText = BaseMessages.getString(PKG, "SplashDialog.GA") + " - " + versionText; //$NON-NLS-1$//$NON-NLS-2$
}

Font verFont = new Font(e.display, "Helvetica", 11, SWT.BOLD); //$NON-NLS-1$
e.gc.setFont(verFont);
e.gc.drawText(versionText, 290, 205, true);

// try using the desired font size for the license text
int fontSize = 8;
Font licFont = new Font(e.display, "Helvetica", fontSize, SWT.NORMAL); //$NON-NLS-1$
e.gc.setFont(licFont);

// if the text will not fit the allowed space
while (!willLicenseTextFit(licenseText, e.gc)) {
fontSize--;
licFont = new Font(e.display, "Helvetica", fontSize, SWT.NORMAL); //$NON-NLS-1$
e.gc.setFont(licFont);
}

e.gc.drawText(licenseText, 290, 290, true);
}
});

1. 修改背景圖片
找到ui/image/下面的kettle_splash.png,替換該圖片
2. 修改版本信息
找到e.gc.drawText(versionText, 290, 205, true); 改為e.gc.drawText("海康威視數據交換平台V1.0", 290, 205, true);
3. 修改下面的描述性文字
找到e.gc.drawText(licenseText, 290, 290, true);改為e.gc.drawText("作者:海康", 290, 290, true);
4. 預覽效果

熱點內容
c語言中的除號 發布:2024-11-15 16:51:09 瀏覽:215
安卓ops是什麼文件 發布:2024-11-15 16:32:18 瀏覽:927
雙線性插值演算法c 發布:2024-11-15 16:30:45 瀏覽:866
c語言和vc的區別 發布:2024-11-15 16:19:23 瀏覽:118
linux是免費的嗎 發布:2024-11-15 15:53:44 瀏覽:617
多控存儲 發布:2024-11-15 15:52:42 瀏覽:283
一年級數學分解演算法 發布:2024-11-15 15:41:08 瀏覽:411
安卓個人熱點怎麼分享 發布:2024-11-15 15:40:16 瀏覽:264
墊錢解壓 發布:2024-11-15 15:38:54 瀏覽:336
miui4相當於安卓什麼系統 發布:2024-11-15 15:37:54 瀏覽:709