0

注意:JSR-352,Java EE,wildfly 17.0.1,没有 spring

我在 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(正确!),但永远不会执行第二步。

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

4

1 回答 1

3

您可以在第一步中包含一个转换元素列表,而不是next属性,以根据退出状态(批处理的返回值)来指导作业的执行流程。类似于以下内容:

<step id = "step1">
  <batchlet ref="xmlRead"/>

  <next on = "flag1" to = "step2"/>
  <stop on = "flag2"/>
  <fail on = "flag3"/>
</step>

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

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

于 2020-02-25T14:58:55.853 回答