JavaEE - EJB 3.1:我们可以对已检查的异常强制进行事务回滚吗?

时间:2013-11-20 08:47:05

标签: java-ee exception-handling jboss transactions ejb-3.1

我知道如果EJB方法抛出已检查的异常,则不会发生事务回滚。

但有没有办法在存在检查异常时强制回滚,而不必在每个方法中调用setRollbackOnly()或创建我自己的用@ApplicationException(rollback=true)注释的Exception类?

目前我们所有的EJB方法都抛出异常(mymethod() throws Exception),我们希望在抛出此类异常时应用快速修复来进行事务回滚,而不必修改每个方法签名。

是否可以通过修改应用程序服务器上的参数(当前使用Jboss AS 7.1.1),在EJB类上使用注释或通过定义某种拦截器来实现?

感谢您的帮助;)

1 个答案:

答案 0 :(得分:4)

根据ejb 3.1规范,也可以在部署描述符文件中指定rollback属性。

  

14.2.1应用程序例外

     

应用程序异常不会自动导致将事务标记为回滚,除非   ApplicationException批注应用于异常类,并使用   rollback元素值true或应用程序异常部署描述符元素   对于异常,将rollback元素指定为true。

Here您可以检查如何在ejb-jar.xml文件中包含application-exception元素。 我认为它看起来像:

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

我从未尝试过这个(我并不是说这是个好主意),但我认为这应该有效,因为它受到规范的支持。