我在EJB3无状态会话bean中使用CMT。另外我创建了自己的Exception,注释“@ApplicationException(rollback = true)”。EJB3事务回滚
当我想要回滚事务时,是否必须使用“context.setRollbackOnly()”?
我可以通过在bean中的公共方法内引发异常来回滚事务吗?
如果是这样(的答案,Q#2是肯定的),我必须在方法声明异常抛出异常的方法的还是会足以随便扔在方法内部异常和处理它在同一个方法里面呢? (我不想传播异常到一个新的水平。我只是想回滚除外。)提前
感谢。 ;)
“如果您在代码中捕获了已检查的异常,则必须使用setRollbackOnly来回滚事务。” 你也可以抛出相同的异常并回滚事务吗? – 2010-03-03 03:36:03
您可以使用throws子句抛出相同的异常,但事务不会回滚。如果您想在这种情况下回滚事务,则必须将@ApplicationException(rollback = true)添加到您的异常中。另一种方法是将检查的异常封装在未经检查的异常(例如RuntimeException)中。但是这种方式并不是首选,因为如果抛出RuntimeException,容器会放弃bean实例并创建一个新实例。 – Steve 2010-03-03 06:30:05
我只是在类似的原因看这个答案,并希望指出,你链接到的书不再在该网站提供完整的,它是从2006年,所以它是非常过时的,可能没有太多用于JEE5和JEE6上下文。 – BillR 2012-09-08 00:24:44