【问题标题】:How to run a Talend Job on JBoss from a Maven project?如何从 Maven 项目在 JBoss 上运行 Talend 作业?
【发布时间】:2013-12-02 19:41:54
【问题描述】:

Talend Open Studio for Data Integration 5.3.1(在 Windows 7 上)导出作业后,如何从 Eclipse Maven 项目 运行 Talend 作业? 哪些依赖项是特定于作业的,哪些依赖项是全局的?

我的 Eclipse 项目在 JBoss 5.1.0.GA 上运行。它为接收的每种文件运行一个 Talend 作业,为每个文件执行一个 ETL 过程。 我通过执行“导出作业 - 自治作业”从 Talend 导出每个作业,并将 JAR 文件添加为 Maven 项目的依赖项。但我认为我不能在服务器上运行这些作业。

【问题讨论】:

  • 请详细说明您的问题。你的环境是什么?您如何导出 Talend 项目?
  • 我的 Eclipse 项目正在 JBoss 上运行。它为接收的每种文件运行一个 Talend 作业,为每个文件执行一个 ETL 过程。我通过执行“导出作业”从 Talend Open Studio for Data Integration 导出每个作业,并将 JAR 文件添加为 Maven 项目的依赖项。
  • 您是否将 Talend 作业导出为独立的?还是它们部署在应用程序容器中?您使用的是哪个环境?窗户? Unix。请更新您的原始问题以包含这些内容。

标签: java eclipse maven jboss5.x talend


【解决方案1】:

似乎你做的一切都很好,你所需要的只是创建正确的 pom.xml,它将包括你的项目的 jars 和 context.properties。我正在创建一个包含必要文件的工件。这是我的 pom 的一个例子:

    <copy todir="${project.build.outputDirectory}">
       <fileset dir="${basedir}/My_Job_Main/" includes="*.jar"/>
    </copy>
    <jar destfile="${project.build.outputDirectory}/myJar.jar">
      <zipfileset dir="${basedir}/My_Job_Main/" 
         includes="**/my_job_main/**"
         excludes="**/src/**,**/items/**"/>
    </jar>
    <zip destfile="${basedir}/target/my.artifact.id-1.0-SNAPSHOT.jar">
       <zipgroupfileset dir="${project.build.outputDirectory}" includes="*.jar"/>
    </zip>

然后将此工件作为依赖项添加到您的 ear 文件中。

在您将运行此作业的类中,您应该简单地导入作业类并执行函数:

My_Job_Main job = new My_Job_Main();
job.runJobInTOS(params);//params -> is the String array of context variables

解决方案 2:

但是这个解决方案是我不喜欢的。因此,我建议在导出作业时导出作业并动态加载它们,而无需使用 Maven 进行部署。它可以让您灵活地更改作业,而无需重新启动服务器。

这是一个动态加载作业 jar 文件并执行它们的代码示例:

URL [] urls = new URL[length];

File jar = new File("path_to_jo_jar_file");
urls[0] = jar.toURI().toURL();

String params[] = new String[length];
params[0] = "--context=Default";
params[1] = "--context_param";
params[2] = "paramName=paramValue";

Class<?>[] params_type = new Class[]{String[].class};
URLClassLoader child = new URLClassLoader(urls , this.getClass().getClassLoader()); 
Class classToLoad = Class.forName( "my_job_main.My_Job_Main", true, child);
Method method = classToLoad.getDeclaredMethod ("runJobInTOS", params_type);
method.setAccessible(true);
Object instance = classToLoad.newInstance();
method.invoke(instance, new Object[]{ args } );

希望这会有所帮助。如果您有更多问题,请在 cmets 发帖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多