Я использую CMT в сеансах сеанса без учета состояния EJB3. Также я создал свое собственное исключение с аннотацией «@ApplicationException (rollback = true)».Откат транзакции EJB3
Должен ли я использовать «context.setRollbackOnly()», когда я хочу отменить транзакцию?
Могу ли я просто откатить транзакцию, выбросив исключение внутри публичного метода в bean-компоненте?
Если да (ответ на Q # 2 - да), то должен ли я исключить исключение из метода, объявив исключение в методе или будет достаточно просто выбросить исключение внутри метода и обработать его он внутри того же самого метода? (Я не хочу распространять исключение на следующий уровень. Я просто хочу отменить исключение.)
Заранее спасибо. ;)
«Если вы поймали проверенное исключение внутри кода, вы должны использовать setRollbackOnly для отката транзакции». Можете ли вы также бросить ту же исключение и отменить транзакцию? –
Вы можете исключить одно и то же исключение из предложения throws, но транзакция не возвращается. Если вы хотите отменить транзакцию в этом случае, вы должны добавить исключение @ApplicationException (rollback = true) к своему исключению. Другой способ заключается в том, чтобы обернуть проверенное исключение из неконтролируемого исключения (например, RuntimeException). Но этот способ не является действительно предпочтительным, потому что, если выбрано RuntimeException, контейнер отбрасывает экземпляр bean и создает новый. – Steve
Я просто смотрел на этот ответ по тем же причинам и хочу указать, что книга, на которую вы ссылаетесь, больше не предлагается полностью на этом сайте, и это с 2006 года, поэтому она ужасно устарела и, вероятно, не очень удобна в JEE5 и контексты JEE6. – BillR