1、调用本地Job和Trans

  较简单不用多说没有遇到任何问题,以下是代码:

import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.util.EnvUtil;
import org.pentaho.di.job.Job;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;
import org.pentaho.di.repository.RepositoryDirectoryInterface;
import org.pentaho.di.repository.kdr.KettleDatabaseRepository;
import org.pentaho.di.repository.kdr.KettleDatabaseRepositoryMeta;
public class MyUtils { public static void main(String[] args) { String[] params = {"1","content","d:\\test1.txt"};
runTransfer(params, "D:\\一起浪\\数据资源管理平台\\kettle\\test.ktr");
} /**
* 运行转换文件方法
* @param params 多个参数变量值
* @param ktrPath 转换文件的路径,后缀ktr
*/
public static void runTransfer(String[] params, String ktrPath) {
Trans trans = null;
try {
// // 初始化
// 转换元对象
KettleEnvironment.init();// 初始化
EnvUtil.environmentInit();
TransMeta transMeta = new TransMeta(ktrPath);
// 转换
trans = new Trans(transMeta); // 执行转换
trans.execute(params);
// 等待转换执行结束
trans.waitUntilFinished();
// 抛出异常
if (trans.getErrors() > 0) {
throw new Exception(
"There are errors during transformation exception!(传输过程中发生异常)");
}
} catch (Exception e) {
e.printStackTrace();
}
} /**
* java 调用 kettle 的job
*
* @param jobname
* 如: String fName= "D:\\kettle\\informix_to_am_4.ktr";
*/
public static void runJob(String[] params, String jobPath) {
try {
KettleEnvironment.init();
// jobname 是Job脚本的路径及名称
JobMeta jobMeta = new JobMeta(jobPath, null);
Job job = new Job(null, jobMeta);
// 向Job 脚本传递参数,脚本中获取参数值:${参数名}
// job.setVariable(paraname, paravalue);
job.setVariable("id", params[0]);
job.setVariable("content", params[1]);
job.setVariable("file", params[2]);
job.start();
job.waitUntilFinished();
if (job.getErrors() > 0) {
throw new Exception(
"There are errors during job exception!(执行job发生异常)");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

调用本地Job和Trans

2、连接oracle资源库

  调用资源库中的Trans,并在本地执行,以下是代码:

    /**
* 执行存储在数据库资源库中的转换
*
* @Description:
* @throws KettleException
* @author Jeffy
* @since:2016-9-23
*/
public static void executeTrans(String transName) throws KettleException {
//初始化kettle环境
KettleEnvironment.init();
//创建资源库对象,此时的对象还是一个空对象
KettleDatabaseRepository repository = new KettleDatabaseRepository();
//创建资源库数据库对象,类似我们在spoon里面创建资源库
DatabaseMeta dataMeta = new DatabaseMeta("ETL", "Oracle", "Native(JDBC)", "127.0.0.1", "DBname", "1521",
"username", "password");
//资源库元对象,名称参数,id参数,描述等可以随便定义
KettleDatabaseRepositoryMeta kettleDatabaseMeta =
new KettleDatabaseRepositoryMeta("ETL", "ETL", "ETL description",dataMeta);
//给资源库赋值
repository.init(kettleDatabaseMeta);
//连接资源库
repository.connect("admin","admin");
//根据变量查找到模型所在的目录对象,此步骤很重要。
RepositoryDirectoryInterface directory = repository.findDirectory("/test");
//创建ktr元对象
TransMeta transMeta = ((Repository) repository).loadTransformation(transName, directory, null, true, null ) ;
//执行参数
String[] params = {"1","07bb40f7200448","d:\\haha.txt"};
//创建ktr
Trans trans = new Trans(transMeta);
//执行ktr
trans.execute(params);
//等待执行完毕
trans.waitUntilFinished(); if(trans.getErrors()>0)
{
System.err.println("Transformation run Failure!");
}
else
{
System.out.println("Transformation run successfully!");
}
}

  过程中,KettleEnvironment.init();语句报错一般由于jar包没有引全,可根据错误的包名,去找到应该引入却未引入的jar包。另外,loadTransformation时遇到一个比较特别的错误:

2016/10/08 10:32:19 - ETL - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : 当读共享文件时发生错误(继续加载): org.pentaho.di.core.exception.KettleDatabaseException:
2016/10/08 10:32:19 - ETL - Error determining value metadata from SQL resultset metadata
2016/10/08 10:32:19 - ETL - For input string: "4294967295"
2016/10/08 10:32:19 - ETL - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : org.pentaho.di.core.exception.KettleDatabaseException:
2016/10/08 10:32:19 - ETL - Error determining value metadata from SQL resultset metadata
2016/10/08 10:32:19 - ETL - For input string: "4294967295"
2016/10/08 10:32:19 - ETL -
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.core.row.value.ValueMetaBase.getValueFromSQLType(ValueMetaBase.java:4588)
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.core.database.Database.getValueFromSQLType(Database.java:2267)
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.core.database.Database.getRowInfo(Database.java:2229)
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.core.database.Database.getRow(Database.java:2341)
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.core.database.Database.getLookup(Database.java:2713)
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.core.database.Database.getLookup(Database.java:2703)
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.core.database.Database.getLookup(Database.java:2699)
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.repository.kdr.delegates.KettleDatabaseRepositoryConnectionDelegate.getTransAttributeRow(KettleDatabaseRepositoryConnectionDelegate.java:619)
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.repository.kdr.delegates.KettleDatabaseRepositoryConnectionDelegate.getTransAttributeString(KettleDatabaseRepositoryConnectionDelegate.java:761)
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.repository.kdr.delegates.KettleDatabaseRepositoryTransDelegate.getTransAttributeString(KettleDatabaseRepositoryTransDelegate.java:1481)
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.repository.kdr.delegates.KettleDatabaseRepositoryTransDelegate.readTransSharedObjects(KettleDatabaseRepositoryTransDelegate.java:1490)
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.repository.kdr.delegates.KettleDatabaseRepositoryTransDelegate.loadTransformation(KettleDatabaseRepositoryTransDelegate.java:500)
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.repository.kdr.KettleDatabaseRepository.loadTransformation(KettleDatabaseRepository.java:278)
2016/10/08 10:32:19 - ETL -     at com.inspur.commons.MyUtils.executeTrans(MyUtils.java:107)
2016/10/08 10:32:19 - ETL -     at com.inspur.commons.NewTest.main(NewTest.java:126)
2016/10/08 10:32:19 - ETL - Caused by: java.lang.NumberFormatException: For input string: "4294967295"
2016/10/08 10:32:19 - ETL -     at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
2016/10/08 10:32:19 - ETL -     at java.lang.Integer.parseInt(Integer.java:495)
2016/10/08 10:32:19 - ETL -     at java.lang.Integer.parseInt(Integer.java:527)
2016/10/08 10:32:19 - ETL -     at oracle.jdbc.driver.OracleResultSetMetaData.getPrecision(OracleResultSetMetaData.java:331)
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.core.row.value.ValueMetaBase.getOriginalColumnMetadata(ValueMetaBase.java:4608)
2016/10/08 10:32:19 - ETL -     at org.pentaho.di.core.row.value.ValueMetaBase.getValueFromSQLType(ValueMetaBase.java:4561)
2016/10/08 10:32:19 - ETL -     ... 14 more
2016/10/08 10:32:19 - ETL - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : 一个数据库错误发生在从资源库文件读取转换时
2016/10/08 10:32:19 - ETL - org.pentaho.di.core.exception.KettleDatabaseException:
2016/10/08 10:32:19 - ETL - ERROR executing query
2016/10/08 10:32:19 - ETL -
2016/10/08 10:32:19 - ETL - Error determining value metadata from SQL resultset metadata
2016/10/08 10:32:19 - ETL - For input string: "4294967295"

这是由于oracle的jar包版本不对,原本引入的是ojdbc14.jar,去kettle目录\pdi-ce-6.1.0.1-196\data-integration\lib里找到ojdbc14-10.2.0.1.0.jar,替换掉原来的jar包就可以了。

3、远程调用

nohup  ./carte.sh  127.0.0.1  8080 > ./log/carte.log &

java项目调用kettleJob和Trans的更多相关文章

  1. JAVA 项目 调用外部的WebSerivce接口,入门实例 (一)

    前言: 第一次接触WebService,工作需要,调用外部的WebService接口,所以暂时我这里不考虑发布,做个记录,待以后回来可以看看,只是最初级的,所以有何不好.不对的地方,欢迎看到的同僚给予 ...

  2. Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决

    问题描述: mac笔记本本身会自带几个python版本,比如python2.7版本,我没有改动mac默认的python版本,只是安装了python3.7版本. 使用Pycharm开发Python项目没 ...

  3. Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参

    Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...

  4. java程序调用kettle

    (1).将相应的kettle的jar包导入的java项目,主要的jar包有一下几个. (2).java程序. package cn.com.taiji.oosweb.test.web; import ...

  5. 将 java 项目打包成可运行的 jar 包(main 函数带参数),并上传到 linux 服务器上运行

    一.概述 java项目有两种架构,一种是 B/S 架构的,一种是 C/S 架构的. 对于 B/S 架构来说,我们常见的 java ee 即是 B/S 架构,通常,开发人员会在本地进行开发,然后将项目打 ...

  6. 使用Runtime.getRuntime().exec()在java中调用python脚本

    举例有一个Python脚本叫test.py,现在想要在Java里调用这个脚本.假定这个test.py里面使用了拓展的包,使得pythoninterpreter之类内嵌的编译器无法使用,那么只能采用ja ...

  7. 使用maven编译Java项目 http://www.tuicool.com/articles/YfIfIrq

    使用maven编译Java项目 时间 2014-07-17 17:42:37  Way Lau's Blog 原文  http://www.waylau.com/build-java-project- ...

  8. 手动编译并运行Java项目的过程

    现在Java开发基本上就是IDE调试,如果跨平台打个jar包过去运行一般就可以了,但是有些情况比如需要引入外部依赖的时候,这个时候是不能直接运行的,还需要引入一些外部的参数,并不是简单的javac和j ...

  9. 使用Scala实现Java项目的单词计数:串行及Actor版本

    其实我想找一门“具有Python的简洁写法和融合Java平台的优势, 同时又足够有挑战性和灵活性”的编程语言. Scala 就是一个不错的选择. Scala 有很多语言特性, 建议先掌握基础常用的: ...

随机推荐

  1. JavaScript中style, currentStyle和 getComputedStyle的异同

    今天在做项目的时候,习惯性的用到了element.style.width,然而浏览器却报错,错误提示是style is undefined,这是我才意识到,内联样式表和外联样式表在js应用中也有很大的 ...

  2. J2EE、J2SE、J2ME是什么意思?

    本文介绍Java的三大块:J2EE.J2SE和J2ME.J2SE就是Java2的标准版,主要用于桌面应用软件的编程:J2ME主要应用于嵌入是系统开发,如手机和PDA的编程:J2EE是Java2的企业版 ...

  3. SSH整合开发的web.xml配置

    <?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" ...

  4. PCA and kmeans MATLAB实现

    MATLAB基础知识 l  Imread:  读取图片信息: l  axis:轴缩放:axis([xmin xmax ymin ymax zmin zmax cmin cmax]) 设置 x.y 和  ...

  5. centos 6 安装 gitlib

    安装gitlab-----------1. 下载 gitlabcurl -O https://downloads-packages.s3.amazonaws.com/centos-6.5/gitlab ...

  6. 【转】一名大学生的PHP进阶之路

    我是一名河南某职业学院的学生,比较喜欢PHP开发 的 工作,自己也曾经自学过php,but如果没有老师教还真是难以坚持啊,在这里给大家说一下寒假在麦子的学习感受,首先说麦子每一堂课程都给了特别详细的 ...

  7. 【笔记】ListView的使用

    1.0 ListView三要素 1.0.1  创建基本步骤 1.在布局文件中创建一个ListView组件,并在Activity中声明这个组件. 2.在Activity中,创建一个合适的Adapter. ...

  8. Ubuntu系统下Xen虚拟机的基本安装方法(代码创建)

    Ubuntu上Xen安装虚拟机方法一dd一个空的磁盘sudo dd if=/dev/zero of=/home/vm1.img bs=1G count=8 下载Xen VM通用配置文件 sudo wg ...

  9. POJ 2481-树状数组

    题意:给定几个区间,判断该区间是其余区间的真子集个数. 分析:真子集即寻找x,y满足a(小于或等于x),b(大于或等于y)的区间.跟star-POJ2352很类似. 转化:star那个题目是x,y都是 ...

  10. Mac下用brew安装nginx

    1. nginx nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TC ...