Event subprocess и OptimisticLockingException - как побороть?

Всем привет!

Имеется процесс, содержащий в себе подпроцесс по событию. Модель процесса выглядит примерно как на диаграмме ниже (опущены элементы, не имеющие отношения к проблеме).

Задача “Определить получателей и информировать” вызывает два делегата:

  1. listener на событии start - отбор получателей
  2. реализация задачи - информирование получателей

На задаче установлены признаки:

  • async before = true,
  • exclusive = true.

Сама задача может выполняться от 100 миллисекунд до 30 секунд.

Периодически срабатывает механизм защиты от блокировок:

2021-09-28 14:24:39.547 WARN 54417 --- [aTaskExecutor-2] org.camunda.bpm.engine.jobexecutor : ENGINE-14006 Exception while executing job a3317d27-204e-11ec-bb01-76d22c9ca3e8: OptimisticLockingException. To see the full stacktrace set logging level to DEBUG.

Что в свою очередь приводит к повторному срабатыванию задачи.

Строго говоря, одновременно может работать только один экземпляр подпроцесса, что позволило решить проблему обходным путем. Но хотелось бы найти альтернативные решения :slight_smile:

Привет, @Mstislav ,

Одно из возможных решений данной проблемы является разделение сервисного таска на два:

  1. “Определить получателей”, который будет содержать логику listener-а. Также можно установить на этот таск async before, exlusive = true
  2. “Информировать получателей”
1 лайк

Спасибо, попробуем. Мысль разделить задачу на 2 кажется рациональной, т.к. делегат отбирающий получателей вызывает достаточно ресурсоемкий метод.

Воспользовались обеими рекомендациями. Спасибо)

Добрый день!
Жаль не видно картинки.

реанимировали картинку )