Откат транзакции EJB3

Я использую CMT в сеансовых объектах без сохранения состояния EJB3. Также я создал свое собственное Исключение, имеющее аннотацию "@ApplicationException (rollback=true)".

  1. Я должен использовать "context.setRollbackOnly ()", когда я хочу откатывать транзакцию?

  2. Я могу просто откатывать транзакцию путем выдавания исключения в открытом методе в бобе?

  3. Раз так (ответ на Q#2 - да) я должен выдать исключение из метода путем объявления исключения в методе, или будет достаточно просто выдать исключение в методе и обработать его в самом том же методе? (Я не хочу распространять исключение к следующему уровню. Я просто хочу откатывать исключение.)

Заранее спасибо. ;)

30
задан ruwan.jayaweera 3 March 2010 в 03:32
поделиться

1 ответ

Во-первых, не существует отката исключения, это откат транзакции.

  1. Если вы бросаете свое исключение с @ApplicationException(rollback=true), вам не придется откатывать транзакцию вручную. Context.setRollbackOnly() заставляет контейнер откатить транзакцию, даже если нет исключения.
  2. Проверенное исключение само по себе не откатывает транзакцию. Оно должно иметь аннотацию @ApplicationException(rollback=true). Если исключение является RuntimeException и исключение не поймано, оно заставляет контейнер откатить транзакцию. Но будьте осторожны, контейнер в этом случае отбросит экземпляр EJB.
  3. Как уже упоминалось в п. 2.), если вы бросите RuntimeException, транзакция будет откачена автоматически. Если вы поймали проверенное исключение внутри кода, вы должны использовать setRollbackOnly для отката транзакции.

Для получения дополнительной информации ознакомьтесь с бесплатной книгой Mastering EJB. В ней очень хорошо описаны сценарии отката, и она бесплатна для скачивания.

69
ответ дан 27 November 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: