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

JSR 352: Wildfly9 / JBeret - How to call a batch job that it is not contained at the same deployment file level

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

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

所以,问题是什么?

经过"little"研究,我在以下链接中找到了答案(分散):

Wildfly Issues

Mailing list

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

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

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

就这些了。

WildFly 问题(https://issues.jboss.org/browse/WFLY-7000,与上述问题类似,但不同)已修复,应该解决您的第 1 点(必须使用空的 batch-jobs/ 目录)。