Я на ютубе видал объяснение какого-то паренька из Индии - правда слушать его это отдельное удовольствие)
Собственно первое что нужно понять, что Camunda не записывает в БД состояние процесса и значение переменных каждый раз, когда оно меняется
Если не менять никаких настроек, связанных с транзакциями, то сохранение в БД произойдет только при достижении блока, на котором процесс остановится, чтобы чего то подождать. Ну самый очевидный пример - UserTask. То что в документации называется
Wait states Т.е. стартуем процесс и он пытается выполнить весь кусок до первого такого стабильного состояния. Если где-то произошло исключение, то процесс вообще не запустится.
То же самое происходит дальше. Если при выполнении процесса между Wait states произойдет исключение, то процесс остановится не там, где оно произошло, а откатится в начальное стабильное состояние. Такое поведение очень похоже именно на привычные всем транзакции.
При этом такое поведение можно регулировать за счет флагов Asynchronous before и Asynchronous after.
Установка этих флагов позволяет изменить границы транзакций и увеличить их количество. Если у всех блоков установить оба флага, то на каждом шаге состояние процесса будет записываться в БД сразу по завершению выполнения блока.
Я посмотрел еще раз документацию про Conditional events
https://docs.camunda.org/manual/7.15/reference/bpmn20/events/conditional-events/#trigger-conditional-eventsИ не обнаружил непосредственной взаимосвязи с транзакциями
Но вполне возможно она есть, поэтому попробуйте для начала в основном процессе поставить на всех ваших ServiceTask оба флага и посмотрите, что из этого выйдет.