2016-01-25 3 views
0

У меня возникла проблема с асинхронными рабочими процессами. У меня есть этот дизайн:Activiti: при сбое CallActivity рабочий процесс никогда не заканчивается

Workflow1:

start -> ScriptActivity1(бросает NullPointerException, чтобы проверить обработку ошибок)-> end

workflow2:

start -> CallActivity(который называет workflow1)-> end


Я вижу, что если я развернуть рабочий процесс как асинхронный, если Workflow1 терпит неудачу, workflow2 никогда не заканчивается, но этого не происходит, когда они развертываются как синхронными.

Кроме того, если я выполняю только рабочий процесс1, он неправильно отображает соответствующее исключение.

Кто-нибудь знает, как справиться с этой проблемой?

+0

Вы управляете NPE где-нибудь? Если нет, это ожидаемое поведение, если у вас есть асинхронные задачи. Когда Activiti получает техническое исключение (любое, что не является подклассом BpmnError) из активности, оно будет повторять его несколько раз. После достижения предела повторного запуска двигатель отказывается, но соответствующее задание сохраняется в таблице управления - по крайней мере, для «классического» исполнителя заданий. Предполагается, что технические ошибки в производстве обычно вызваны временными проблемами, такими как внешний сервиз, недоступный. Вы можете перезапустить неудавшееся задание с помощью API или обновления db. –

ответ

0

Все это связано с тем, как работает технология нарезания резьбы. Я предполагаю, что ваши «тестовые» процессы не имеют человеческих задач, поэтому вы испытываете такое поведение, какое вы есть. Синхронные процессы запускаются в том же потоке, что и инициатор, до тех пор, пока они не достигнут состояния ожидания (обычно слушатель сообщения, человеческая задача или прослушиватель сигналов). Таким образом, когда процесс Workflow 1 завершится неудачно, он убьет workflow2.

Когда все происходит асинхронно, расписание заданий - это то, что начинается с вашего вызванного процесса, и это по существу автономный процесс (хотя имеет ссылку на его родителя). Когда рабочий процесс 1 выходит из строя, рабочий процесс 2 продолжается успешно.

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

Сообщите мне, если вы хотите использовать схематический пример.

+0

Спасибо большое! .. Я читаю в документах Activiti о пограничных слушателях, но это не ясно для меня .. Я бы очень признателен, что вы даете хороший график, где я вижу концепцию. Еще раз спасибо. – calbertts