美文网首页ETL开发Kettle
Java调用自己开发的Kettle plugin插件

Java调用自己开发的Kettle plugin插件

作者: lyjohn | 来源:发表于2016-07-07 23:58 被阅读1016次

    反正找了一天天也没找到!!! Kettle 6.1 相比 Kettle 3 改动太大了。下面直接上代码,备忘!

    在初始化

    KettleEnvironment.init();   
    

    添加插件如下代码,就能够注册一个Step的插件了

    List<String> empty = Collections.emptyList();
    // 这个map别复用了,下一个插件重新new一个,不然即使clear了,下一个插件也不能注册成功
    Map<Class<?>,String> xxxxClassMap=new HashMap<Class<?>,String>();
    // xxxxMeta 就是开发的插件的Meta类了
    xxxxClassMap.put(StepMetaInterface.class,xxxxMeta.class.getName());
    PluginInterface xxxxPlugin=new Plugin(
        new String[]{"MergeField"},
        StepPluginType.class,
        StepMetaInterface.class,
        "转换",
        "插件的名字",
        "插件的描述,不影响java执行",
        "插件的图片,不影响java执行",
        false,
        false,
        xxxxClassMap,
        empty,
        null,
        null);
    PluginRegistry.getInstance().registerPlugin(StepPluginType.class,xxxxPlugin);
    
    Map<Class<?>,String> anotherClassMap=new HashMap<Class<?>,String>();
    // anotherMeta 就是开发的插件的Meta类了
    xxxxClassMap.put(StepMetaInterface.class,anotherMeta.class.getName());
    PluginInterface anotherPlugin=new Plugin(
        new String[]{"MergeField"},
        StepPluginType.class,
        StepMetaInterface.class,
        "转换",
        "插件的名字",
        "插件的描述,不影响java执行",
        "插件的图片,不影响java执行",
        false,
        false,
        anotherClassMap,
        empty,
        null,
        null);
    PluginRegistry.getInstance().registerPlugin(StepPluginType.class,anotherPlugin);
    

    如此这般就能运行了
    附上java调用stepMeta的完整代码

    KettleEnvironment.init();   
    List<String> empty = Collections.emptyList();
    // 这个map别复用了,下一个插件重新new一个,不然即使clear了,下一个插件也不能注册成功
    Map<Class<?>,String> xxxxClassMap=new HashMap<Class<?>,String>();
    // xxxxMeta 就是开发的插件的Meta类了
    xxxxClassMap.put(StepMetaInterface.class,xxxxMeta.class.getName());
    PluginInterface xxxxPlugin=new Plugin(
        new String[]{"MergeField"},
        StepPluginType.class,
        StepMetaInterface.class,
        "转换",
        "插件的名字",
        "插件的描述,不影响java执行",
        "插件的图片,不影响java执行",
        false,
        false,
        xxxxClassMap,
        empty,
        null,
        null);
    PluginRegistry.getInstance().registerPlugin(StepPluginType.class,xxxxPlugin);
    // 数据库连接元对象(连接名称,不必与kettle中配置的保持一致:数据库类型:连接方式(kettle支持的连接方式):资源库IP:资源库实例名:资源库端口:资源库用户名:资源库用户密码)  
    DatabaseMeta connection = new DatabaseMeta("资源库名称,不影响", "Oracle", DatabaseMeta.getAccessTypeDesc(0), "oracle的地址", "oracle的实例", "1521", "oracle用户名", "oracle密码");  
    // 资源库元对象  
    KettleDatabaseRepositoryMeta repinfo = new KettleDatabaseRepositoryMeta();  
    repinfo.setConnection(connection);  
    // 资源库  
    KettleDatabaseRepository repository = new KettleDatabaseRepository();
    repository.init(repinfo);
    // 连接资源库  
    repository.connect("admin","admin",true);  
    // 资源库目录对象 
    RepositoryDirectoryInterface directoryInterface=repository.loadRepositoryDirectoryTree();
    // 转换元对象  
    TransMeta transMeta=repository.loadTransformation("tran的名称",directoryInterface,null,true,null);
    // 转换  
    Trans trans = new Trans(transMeta);
    
    // 执行转换  
    trans.execute(null);  
    // 等待转换执行结束  
    if(trans.getErrors()>0){
        System.out.println("transformation error");
    }else{
        System.out.println("transformation successfully");
    }

    相关文章

      网友评论

        本文标题:Java调用自己开发的Kettle plugin插件

        本文链接:https://www.haomeiwen.com/subject/yswljttx.html