EJB中的容器管理事务

时间:2013-12-05 05:18:54

标签: transactions ejb

如果我将EJB标记为使用容器管理事务,并且从该EJB的方法中我没有显式使用setRollBackOnly()(当发生异常时),该事务是否仍会被标记为自动回滚?

2 个答案:

答案 0 :(得分:2)

取决于异常是应用程序异常(默认情况下是提交)还是系统异常(始终为回滚)。应用程序异常是throws子句上声明的最常检查的异常,但它们也可以通过@ApplicationException注释(或ejb-jar.xml中相应的<application-exception>元素)声明。

答案 1 :(得分:1)

如果抛出的异常从RuntimeException扩展,那么事务将回滚。如果从Exception扩展(而不是RuntimeException),事务将提交。

从ejb 3.0开始,您可以使用@AnnotationException(或ejb-jar.xml文件中的应用程序异常部署描述符元素)更改此行为

无论异常扩展到什么类,如果使用@AnnotationException(rollback = true)标记类,事务将永远不会提交,如果使用@AnnotationException(rollback = false)销售异常,则适用oposite。

请注意,如果您的代码抛出异常,但是在容器拦截它之前捕获它,则该异常不会影响事务状态。