2013-11-20 2 views
5

Я знаю, что если метод EJB выбрасывает исключение проверки, откат транзакции не выполняется.JavaEE - EJB 3.1: Можем ли мы принудительно выполнить откат транзакций по проверенным исключениям?

Но есть ли способ принудительного откат при наличии исключенного исключения без необходимости вызова setRollbackOnly() в каждом методе или для создания моего собственного класса исключений, аннотированного @ApplicationException(rollback=true)?

В настоящее время все наши методы EJB выбрасывают исключение (mymethod() throws Exception), и мы хотели бы применить быстрое исправление, чтобы иметь откат транзакции, когда это исключение генерируется без необходимости изменять каждую подпись метода.

Возможно ли это, изменив параметр на сервере приложений (в настоящее время используя Jboss AS 7.1.1), используя аннотацию на моих классах EJB или определив какой-то перехватчик?

Спасибо за любую помощь;)

ответ

4

Согласно спецификации EJB 3.1 также можно указать атрибут отката в файле дескриптор развертывания.

14.2.1 Исключение Применение

Исключение приложения не автоматически приведет к маркировке транзакции для отката, если ApplicationException аннотации не применяются к классу исключений и задаются со значением элемента отката истинными или элемент дескриптора развертывания приложения-исключения для исключения указывает элемент отката как истинный.

Here вы можете проверить, как включить элемент исключений приложения в файл ejb-jar.xml. Я думаю, что это может выглядеть так:

<assembly-descriptor> 
    <application-exception> 
     <exception-class>java.lang.Exception</exception-class> 
     <rollback>true</rollback> 
    </application-exception> 
</assembly-descriptor> 

Я никогда не пробовал это (и я не говорю, что это хорошая идея), но я думаю, что это должно работать корректно, так как она поддерживается спецификацией.

+0

Большое спасибо! Он отлично работает :) –