Liberty Batch не генерирует исключение, когда задание запускается с тем же входным параметром, что и весенний пакет (JobInstanceAlreadyExistsException) - PullRequest
0 голосов
/ 04 января 2019

Я разрабатываю пакетное задание в java-ee-7 поверх сервера свободы. используя REST API для запуска пакетного задания. Проблема в том, что когда я пытался запустить пакетное задание для того же входного параметра, создается новый экземпляр задания. Принимая во внимание, что весенний пакетный процесс, выдает ошибку, говоря JobInstanceAlreadyExistsException. Я ожидаю что-то подобное, чтобы избежать создания нового задания для того же входного параметра

Входной параметр и состояние пакета были сохранены в постоянном хранилище в базе данных Oracle с использованием таблиц сервера свободы (WLPJOBINSTANCE, WLPSTEPTHREADINSTANCE, wlpjobparameter и т. Д.).

<job xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/jobXML_1_0.xsd"
    id="my-batch-job" restartable="true" version="1.0">
</job>

Ожидается: задание должно выдавать исключение, если передан тот же входной параметр. Фактически: создается новый экземпляр задания для того же входного параметра

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Использование Liberty Batch REST API , чтобы проверить, существует ли соответствующий экземпляр задания

Я собираюсь дать второй, совершенно другой ответ здесь. Другой ответ оправдывает, почему Liberty Batch, а в более общем случае спецификация JSR 352, никогда не сочтет ошибкой отправку второго задания с теми же параметрами задания, что и ранее.

Но если вы действительно хотели предотвратить это, вы можете сделать это в Liberty Batch, используя REST API для запроса перед отправкой, если соответствующий экземпляр задания уже существует. Однако на этом этапе вы можете прервать / предотвратить подачу задания.

Скажем, я хотел сопоставить jobName из BonusPayout, с параметром задания parm1 со значением 1000 и параметром задания parm2 сопоставление 500* ( с глобусом / подстановочным знаком).

Я мог бы сделать это через URL:

https: /// IBM / апи / партии / v4 / jobinstances JobName = BonusPayout & jobParameter.parm1 = 1000 & jobParameter.parm2 = 500 *

Обратите внимание: в doc есть различные другие опции, такие как игнорирование регистра (или нет).

Так что, если я получу совпадение, я могу выбрать НЕ идти вперед и отправить задание (снова).

0 голосов
/ 05 января 2019

Реализация Liberty Batch работает в соответствии с проектом, в соответствии со спецификацией JSR 352.

В Liberty Batch (или в спецификации JSR 352) нет способа помешать вам создать любое количество экземпляров заданий из заданного определения задания, и вам придется создать собственный механизм для этого.

Концептуальная отправная точка в JSR 352 - это определение задания для задания, которое обычно будет выполняться повторно в соответствии с некоторым расписанием: ежедневно, ежемесячно, ежеквартально и т. Д.

Нет ничего в Liberty Batch или в спецификации, которая помешала бы вам запускать новый экземпляр задания с помощью метода JobOperator start () или, используя Liberty Batch REST API , через POST /ibm/api/batch/jobinstances/, потому что некоторый подобный экземпляр задания уже существует.

Вам запрещено перезапускать экземпляр задания, который уже завершен, но никогда не создавать новые экземпляры задания.

Это сформулировано по-другому в этом ответе , и вы найдете концепции спецификаций, более подробно обсуждаемые здесь .

Так что все, что предоставляет Spring Batch, уникально для его реализации.

...