Oracle BPEL, почему компенсация в то время как catch может обрабатывать исключения

Мне просто интересно в Oracle BPEL, цель компенсации - откат бизнеса. Но catch может делать почти похожие вещи (кроме отката в обратном порядке завершения). Я не очень понимаю, зачем нам все еще нужна компенсация?

1 ответ

Решение

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

Представьте, что у вас есть следующий процесс:

<flow>
  <sequence>
    <invoke name="I1"/>
    <invoke name="I2"/>
  </sequence>
  <sequence>
    <invoke name="I3"/>
    <invoke name="I4"/>
  </sequence>
</flow>

Если вы хотите выполнить обработку компенсации, вам просто нужно добавить обработчики компенсации в каждый вызов, и все готово.

Если вы использовали обработчики ошибок, вам нужно как-то проверить, какие действия уже выполнены. Представьте, что I4 выбрасывает ошибку. Вы знаете, что I3 был завершен и должен быть компенсирован. Однако вы НЕ знаете, был ли I1 или I2 запущен или еще не завершен. Вам нужно было бы поиграть с флагами как переменными, которые вам нужно установить для изолированных действий и т. Д. Также обработчики ошибок для I2, I3 и I4 должны содержать логику компенсации для I1. Использование обработчиков компенсации намного чище и проще, чем пытаться их заново изобретать:)

Другие вопросы по тегам