Кейс: глобальный обработчик ошибок BPMN

Ситуация

Мне нужно было проверить централизованный перехват BPMN-ошибки, не меняя сразу большую рабочую модель. Для этого требовался минимальный исполняемый процесс с внешним вызовом и глобальным обработчиком.

Мой вклад

Я собрал минимальный исполняемый процесс:

  1. обычный путь с внешним вызовом;
  2. преобразование неуспешного ответа в ошибку процесса;
  3. event subprocess с error start event;
  4. сохранение кода и сообщения ошибки;
  5. отдельное завершение обработанного сценария.
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 и ручное вмешательство;
  • что увидит вызывающая система.

Связанные заметки