Java EE 7 batch API (JSR-352): можно остановить один шаг, а не всю работу? - PullRequest
0 голосов
/ 25 февраля 2020

Примечание : 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>

Мое требование - обработать остановку задания, и я могу сделать это с переопределением stop () в xmlRead (первый шаг).

Проблема заключается в том, что мне также нужно убедиться, что второй шаг всегда выполняется, но из мои тесты, если я запускаю следующий код в первом пакете XmlRead:

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

В конце состояние выхода для задания будет НЕ УКАЗАНО (правильно!), но второй шаг никогда не будет выполнен.

Есть идеи, как смоделировать этот сценарий?

1 Ответ

2 голосов
/ 25 февраля 2020

У вас может быть список элементов перехода внутри первого шага вместо атрибута next, чтобы направлять поток выполнения задания в зависимости от состояния выхода (возвращаемого значения из пакета). Примерно так:

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

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

Step2 может наблюдать за тем же условием из какого-либо другого общего компонента приложения, чтобы решить, что делать, или вы можете сохранить условие как данные о выполнении задания (см. соответствующее обсуждение )

...