Кейс: глобальный обработчик ошибок BPMN
Ситуация
Мне нужно было проверить централизованный перехват BPMN-ошибки, не меняя сразу большую рабочую модель. Для этого требовался минимальный исполняемый процесс с внешним вызовом и глобальным обработчиком.
Мой вклад
Я собрал минимальный исполняемый процесс:
- обычный путь с внешним вызовом;
- преобразование неуспешного ответа в ошибку процесса;
- event subprocess с error start event;
- сохранение кода и сообщения ошибки;
- отдельное завершение обработанного сценария.
flowchart LR A([Start]) --> B[External call] B --> C([Success]) B -. BPMN error .-> D[[Event subprocess]] D --> E[Record context] E --> F([Handled])
Минимальная модель помогла отдельно проверить область действия обработчика и набор доступных переменных.
Результат
Получилась минимальная модель, на которой механизм можно воспроизвести и проверить отдельно. Она показывает область действия обработчика и передачу контекста, но решение о переносе в конкретный процесс требует отдельной проверки его контракта.
Важное различие
BpmnErrorсообщает о предусмотренном альтернативном исходе процесса.- Java exception обычно означает техническую ошибку выполнения.
- Incident фиксирует проблему job, которую движок не смог завершить после попыток.
Нельзя автоматически превращать любую техническую ошибку в «обработанный бизнес-результат»: так легко скрыть сбой инфраструктуры.
Что я теперь определяю заранее
- какие ошибки являются частью процесса;
- где заканчивается область действия handler;
- какие переменные нужно сохранить;
- должен ли job повториться;
- нужен ли incident и ручное вмешательство;
- что увидит вызывающая система.