JSR 352:Wildfly9 / JBeret - 如何调用批处理作业,它不包含在同一部署文件级别

时间:2015-11-19 21:21:09

标签: java wildfly jsr352 java-batch jberet

我有一个包含JAR库的WAR应用程序。 JAR库包含批处理作业和批处理工件(META-INF/batch-jobs/...)。 WAR应用程序将此jar包含为库,并定义了一个JAX-RS服务,允许客户端调用调用JobOperator接口的批处理作业...

当我运行此部署时,JSR 352实现(JBeret)一直抱怨在调用JobOperator接口时无法找到作业...但是,如果批处理作业和批处理工件包含在WAR部署,一切运行顺利......

那么,问题是什么?

2 个答案:

答案 0 :(得分:4)

经过“小”研究后,我在以下链接中找到答案(分散):

Wildfly Issues

Mailing list

简而言之,为了使这种部署工作,你必须修改调用Job Operator接口的部署来调用所请求的Job(在我的例子中,它是WAR文件)......这些是修改:

  1. batch-jobs文件夹下包含“空”META-INF文件夹。 (我想空是可选的,因为我必须在该文件夹下放置一个README文件以防止GIT删除这样的文件夹)

  2. ServiceLoader文件夹下定义META-INF/services(文件)。必须调用此ServiceLoader(文件):org.jberet.spi.JobXmlResolver并且应包含以下实现作为内容:org.jberet.tools.MetaInfBatchJobsJobXmlResolver

  3. 就是这样。

答案 1 :(得分:0)

WildFly问题(https://issues.jboss.org/browse/WFLY-7000,类似于上面提到的问题,但是是另一个问题)已经修复,应该解决你的问题1(必须使用空的batch-jobs /目录)。