Я использую CMT в сеансовых объектах без сохранения состояния EJB3. Также я создал свое собственное Исключение, имеющее аннотацию "@ApplicationException (rollback=true)".
Я должен использовать "context.setRollbackOnly ()", когда я хочу откатывать транзакцию?
Я могу просто откатывать транзакцию путем выдавания исключения в открытом методе в бобе?
Раз так (ответ на Q#2 - да) я должен выдать исключение из метода путем объявления исключения в методе, или будет достаточно просто выдать исключение в методе и обработать его в самом том же методе? (Я не хочу распространять исключение к следующему уровню. Я просто хочу откатывать исключение.)
Заранее спасибо. ;)
Во-первых, не существует отката исключения, это откат транзакции.
@ApplicationException(rollback=true)
, вам не придется откатывать транзакцию вручную. Context.setRollbackOnly()
заставляет контейнер откатить транзакцию, даже если нет исключения. @ApplicationException(rollback=true)
. Если исключение является RuntimeException
и исключение не поймано, оно заставляет контейнер откатить транзакцию. Но будьте осторожны, контейнер в этом случае отбросит экземпляр EJB. RuntimeException
, транзакция будет откачена автоматически. Если вы поймали проверенное исключение внутри кода, вы должны использовать setRollbackOnly
для отката транзакции. Для получения дополнительной информации ознакомьтесь с бесплатной книгой Mastering EJB. В ней очень хорошо описаны сценарии отката, и она бесплатна для скачивания.