我有一个包含JAR库的WAR应用程序。JAR库包含批处理作业和批处理工件(META-INF/batch-jobs/...
)。WAR应用程序将这个jar包含为一个库,并定义了一个JAX-RS服务,该服务允许客户端调用调用JobOperator
接口的批处理作业。。。
当我运行这个部署时,JSR352实现(JBeret)一直抱怨在调用JobOperator接口时,在任何软件中都找不到作业。。。然而,如果Batch Job和Batch Artifacts作为WAR部署的类包括在内,那么一切都会顺利运行。。。
那么,问题出在哪里呢?
经过"一点"研究,我在以下链接中找到了答案(分散):
Wildfly问题
邮件列表
简而言之,为了使这种部署发挥作用,您必须修改调用Job Operator接口以调用请求的Job(在我的情况下,它是WAR文件)的部署。。。这些是修改:
-
在
META-INF
文件夹下包含一个"空"的batch-jobs
文件夹。(我想空是可选的,因为我必须在该文件夹下放一个自述文件,以防止GIT删除这样的文件夹) -
在
META-INF/services
文件夹下定义一个ServiceLoader
(文件)。必须调用此ServiceLoader(文件):org.jberet.spi.JobXmlResolver
,并且应包含以下实现作为内容:org.jberet.tools.MetaInfBatchJobsJobXmlResolver
仅此而已。
WildFly问题(https://issues.jboss.org/browse/WFLY-7000,类似于上面提到的,但不同)已经修复,并且应该解决您的点1(必须使用空的批处理作业/目录)。