我知道如果EJB方法抛出已检查的异常,则不会发生事务回滚。
但有没有办法在存在检查异常时强制回滚,而不必在每个方法中调用setRollbackOnly()
或创建我自己的用@ApplicationException(rollback=true)
注释的Exception类?
目前我们所有的EJB方法都抛出异常(mymethod() throws Exception
),我们希望在抛出此类异常时应用快速修复来进行事务回滚,而不必修改每个方法签名。
是否可以通过修改应用程序服务器上的参数(当前使用Jboss AS 7.1.1),在EJB类上使用注释或通过定义某种拦截器来实现?
感谢您的帮助;)
答案 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>
我从未尝试过这个(我并不是说这是个好主意),但我认为这应该有效,因为它受到规范的支持。