Heim > Datenbank > MySQL-Tutorial > kettle中调用java类

kettle中调用java类

WBOY
Freigeben: 2016-06-07 16:04:49
Original
1839 Leute haben es durchsucht

kettle中调用java类 有时需要在kettle调用java类,如:验证、查询或自定义加密等。有时甚至连基本的数据访问都不那么简单,如获取一个存储文件或使用一个数据库连接,某些数据源可能封装在应用程序中,手工使用自定义的java客户端访问是唯一的方法。本文介绍

kettle中调用java类

有时需要在kettle调用java类,如:验证、查询或自定义加密等。有时甚至连基本的数据访问都不那么简单,如获取一个存储文件或使用一个数据库连接,某些数据源可能封装在应用程序中,手工使用自定义的java客户端访问是唯一的方法。本文介绍如何在kettle中调用java类。示例代码在这里下载

注:如果你使用kettle4.0及以上版本,也你也可以使用user defined java class 步骤实现。

Modified Java ScriptValue 步骤

关键要在kettle中使用ModifiedJava Script Value 步骤。从名称上看是仅仅执行javascript来实现该步骤,其实也可以执行java代码。为了理解,我们需要知道该步骤使用Rhino javaScript 引擎来实现,使其可以在jvm中实现javascript,也使其成为可能,让脚本去访问java类。为了说明其如何实现,让我们来看一个简单的转换示例,使用java去计算某个字段的md5码。如下图所示:

javascript步骤实现md5计算,包含如下代码:

// simulate java imports

varMessageDigest =java.security.MessageDigest;

varString =java.lang.String;

varStringBuffer =java.lang.StringBuffer;

varInteger =java.lang.Integer;

// get the md5 digest algorithm

varalgorithm =MessageDigest.getInstance("MD5");

// get the input as bytes

varbytes = newString(test_value).getBytes("UTF-8");

// calculate the digest

algorithm.reset();

algorithm.update(bytes);

varmd5Digest =algorithm.digest(); 

// turn the digest into a hex-stringrepresentation

varhexString = newStringBuffer(); 

for(vari =0; i

varhex= Integer.toHexString(0xFF & md5Digest[i]);

if(hex.length()== 1){

hexString.append('0');

}

hexString.append(hex);

}

// write output value

varmd5_hash =hexString.toString().toUpperCase();

让我们详细解释以上代码。

第一部分是就如java 导入包环节,事实上和java中import实现同样目的。声明变量指向java类,是为了避免我们后面引用每个java类使用完整java长类名带来不便。当使用自己定义的类是,要注意不小心覆盖了javascript类。javascript也有其自己的Date类实例,稍不在意,使用这种方式很容易覆盖。

接着是调用简单的java API生成md5值,需要指出的是,输入字段作为javascript对象,“test_value”字段是javascript String对象,有多种方法将其转换成java String对象,这里使用简单的构造函数实现;java String的getBytes()方法返回字节数组;

md5摘要值计算好后,接着通过一小段循环代码生成表现该值的字符串,最后作为一个新字段写到输出行。

使用外部jar包中的类

执行太多的脚步可能影响性能,所以总是把复杂的业务让编译好的java代码来做,通常是一些整洁的实现我们业务的java类库,有时我们可能自己去创建。kettle现有的功能当然不能满足我们的所有需求,调用几个外部类库可以避免写一个完整kettle插件。kettle启动时加载libext目录及子目录下所有jar文件,如果你需要访问自定义jar包的类,需要放在libext文件中。我们示例是关于MD5,从kettle3.2已经有了相应的jar包(apache commons codec项目)。codec项目有很好的方法计算输入字符串的MD5十六进制字符串,正好是我们需要的;我们仅仅使用DigestUtil类的方法即可。

//get a nice md5 hash

varmd5_hash = org.apache.commons.codec.digest.DigestUtils.md5Hex(test_value);

在我笔记本上运行新转换大概10500行/秒,第一版本的仅仅大概2900行/秒.

\

两者的处理速度差别很大,所以用封装好的功能似乎真的飞快,当然有可能apache项目采用完全不同的MD5算法实现。无论怎样,后者的实现既简单又快。

结论

Modified Java Script Value 步骤允许访问任何jvm中java类。如果你ETL项目有特定的需求,你已经使用java实现过的需求,这时你可以考虑使用这种方法试试。当使用脚步代码总是需要监视性能问题。如果你使用了大量的外部库,就需要有正确的版本依赖管理,否则在测试环境或部署环境中会产生问题。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage