Java EE 7 batch API (JSR-352):可以停止一个步骤而不是所有作业吗?



注意:JSR-352,Java EE,在wildfly 17.0.1上,没有春季

我在xml中定义了以下作业:

<?xml version="1.0" encoding="UTF-8"?>
<job id="xml2json" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/jobXML_1_0.xsd" version="1.0">
<flow id="flow">
<step id="step1" next="step2">
<batchlet ref="xmlRead">
</batchlet>
</step>
<step id="step2">
<batchlet ref="notificationBatchlet">
</batchlet>        
</step>
</flow>
</job>

我的要求是处理作业停止,我可以在xmlRead中重写stop(((第一步(。

问题是,我还需要确保第二步始终执行,但根据我的测试,如果我在XmlRead第一批中运行以下代码:

if (shouldStop) {
log.warn("xmlRead - job stopped by user");
return FAILED.toString();
}

最终,作业的退出状态将为FAILED(正确!(,但第二步永远不会执行。

知道如何模拟这种情况吗?

您可以在第一个步骤中拥有一个转换元素列表,而不是next属性,以根据退出状态(batchlet的返回值(来指导作业的执行流。有点像以下内容:

<step id = "step1">
<batchlet ref="xmlRead"/>
<next on = "flag1" to = "step2"/>
<stop on = "flag2"/>
<fail on = "flag3"/>
</step>

步骤2可以从其他一些常见的应用程序组件中观察相同的条件,以决定要做什么,或者您可以将条件保存为作业执行数据(请参阅相关讨论(

我刚刚创建了一个示例批处理应用程序batchlet-singleton.war来演示batchlet、singleton会话bean和条件转换的使用。

相关内容

最新更新