‘壹’ 如何去看kettle 6.0的源码
6我没看过,4倒是看过,网上有文档的,它会大致的告诉你KETTLE的代码结构
‘贰’ 求Kettle 源代码 下载地址及 Kettle java api教程...
http://kettle.pentaho.com/下载地址!想要什么自己选
http://wiki.pentaho.com/display/EAI/Getting+Started基础教程
http://wiki.pentaho.com/display/EAI/Pentaho+Data+Integration+Steps详细教程
对,就是这些地址
‘叁’ 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"
‘肆’ kettle怎样连接数据库连接
java调用kettle数据库类型资源库中的ktr此问题在1个月前或许已经接触,单是一直木有怎么用到,就被耽搁至今;问题的解决要来源于网络,其实我还想说问题的解决的是要靠我们自己的思想,不过多的言情,我们接下来直接进入主题吧!环境:kettle-spoon4.2.0,oracle11g,myeclipse6.5,sqlserver2008前提:在kettle图形界面spoon里面已经做好了一个ktr转换模型,此时我的ktr信息如下图:Step1:在myeclipse创建project,导入kettle集成所需要的包Step2:重点解析与code源码//定义ktr名字privatestaticStringtransName="test1";//初始化kettle环境KettleEnvironment.init();//创建资源库对象,此时的对象还是一个空对象=newKettleDatabaseRepository();//创建资源库数据库对象,类似我们在spoon里面创建资源库DatabaseMetadataMeta=newDatabaseMeta("enfo_bi","Oracle","Native","ip","sid","port","username","password");//资源库元对象,名称参数,id参数,描述等可以随便定义=("enfo_bi","enfo_bi","kingdescription",dataMeta);//给资源库赋值repository.init(kettleDatabaseMeta);//连接资源库repository.connect("admin","admin");//根据变量查找到模型所在的目录对象=repository.findDirectory("/enfo_worker/wxj");//创建ktr元对象TransMetatransformationMeta=((Repository)repository).loadTransformation(transName,directory,null,true,null);//创建ktrTranstrans=newTrans(transformationMeta);//执行ktrtrans.execute(null);//等待执行完毕trans.waitUntilFinished();上面的两个步骤才可以确定是资源库中的那个路径下的ktr和我们用命令执行一样的-dir,-tran-job附上源码:packagekettle;importorg.pentaho.di.core.KettleEnvironment;importorg.pentaho.di.core.database.DatabaseMeta;importorg.pentaho.di.core.exception.KettleException;importorg.pentaho.di.repository.Repository;importorg.pentaho.di.repository.RepositoryDirectoryInterface;importorg.pentaho.di.repository.kdr.KettleDatabaseRepository;importorg.pentaho.di.repository.kdr.KettleDatabaseRepositoryMeta;importorg.pentaho.di.trans.Trans;importorg.pentaho.di.trans.TransMeta;/***Title:java调用kettle4.2数据库型资料库中的转换*Description:*Copyright:Copyright()2012*/{privatestaticStringtransName="test1";publicstaticvoidmain(String[]args){try{//初始化kettle环境KettleEnvironment.init();//创建资源库对象,此时的对象还是一个空对象=newKettleDatabaseRepository();//创建资源库数据库对象,类似我们在spoon里面创建资源库DatabaseMetadataMeta=newDatabaseMeta("enfo_bi","Oracle","Native","ip","sid","port","username","password");//资源库元对象,名称参数,id参数,描述等可以随便定义=("enfo_bi","enfo_bi","kingdescription",dataMeta);//给资源库赋值repository.init(kettleDatabaseMeta);//连接资源库repository.connect("admin","admin");//根据变量查找到模型所在的目录对象,此步骤很重要。=repository.findDirectory("/enfo_worker/wxj");//创建ktr元对象TransMetatransformationMeta=((Repository)repository).loadTransformation(transName,directory,null,true,null);//创建ktrTranstrans=newTrans(transformationMeta);//执行ktrtrans.execute(null);//等待执行完毕trans.waitUntilFinished();if(trans.getErrors()>0){System.err.println("TransformationrunFailure!");}else{System.out.println("Transformationrunsuccessfully!");}}catch(KettleExceptione){e.printStackTrace();}}}
‘伍’ 我将kettle集成的项目中,发现内存一直释放不掉,求解决:
同问:目前只发现怎么把内存加大。但即使加到1440M又如何一样会出错
而且我还是将job分开处理的 多次调用 目前来说是内存使用已经最小了
但还是在处理到1/3的时候就溢出了 头痛的是这个溢出不是100%出现
求解决
这个问题已经解决了 我们实在没办法 把kettle源码改掉了
kettle 4.2版中 kettle-core.jar 包下org.pentaho.di.core.logging.LoggingRegistry
第115行出现逻辑错误删除了为空的数据导致空指针异常
听说其他版本没这个问题 你可以试试
‘陆’ 配置完kettle用写java代码么
1.2.
编译源码
将项目加载到eclipse
将kettle项目拷贝到eclipse的workspace目录下,在eclipse中新建java
project,项目名称和你拷贝过来的kettle文件夹名称一致
项目导入到eclipse中会出现一个错误,如下图,将这个文件的源码全部注释掉
编译
打...
‘柒’ kettle源码是完全公开的吗
2.3以前是公开的,但谷歌宣布,以后的版本就是有偿使用的了
‘捌’ 使用kettle整合新的三层结构的数据库,该怎么玩,怎么修改代码
资源库
默认数据库连接为全局共有
非资源库
a) 将数据库连接进行共享,view-database connections-share
b) 设置为全局变量,在kettle.properties文件中,将数据库连接各属性配置为变量
‘玖’ 如何使用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. 预览效果
‘拾’ kettle源码搭建运行时出现错误
将安装包pdi-ce-5.4.0.1-130\data-integration\ui目录下的所有文件拷贝到源码包pentaho-kettle-5.4.0.1-R\ui目录下,即可解决~~