• kettle中调用java类


    kettle中调用java类

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

    本文介绍怎样在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 < md5Digest.length; 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类实例,稍不在意,使用这样的方式非常easy覆盖。

           接着是调用简单的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实现过的需求。这时你能够考虑使用这样的方法试试。

    当使用脚步代码总是须要监视性能问题。假设你使用了大量的外部库。就须要有正确的版本号依赖管理,否则在測试环境或部署环境中会产生问题。

  • 相关阅读:
    Ajax加载数据的使用
    解决VS2012新建MVC4等项目时,收到此模板加载程序集“NuGet.VisualStudio.Interop…”的错误
    XSS攻击原理
    SQL语句:一张表和另一张表的多重匹配查询
    ASP.NET打开项目错误:将指定的计数添加到该信号量中会导致其超过最大计数。
    读取数据库的数据并转换成List<>
    11款样式新颖的 jQuery/CSS3 网页菜单
    网站提高速度的13个简易规则
    微软分布式缓存解决方案
    性能优化工具 MVC Mini Profiler
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5257471.html
Copyright © 2020-2023  润新知