Java EE7回滚事务

时间:2018-09-17 07:56:50

标签: java java-ee transactions

我知道,未经检查的异常(RuntimeExceptions)通常会导致事务混乱,但是如果您以相同的方式捕获该异常会怎样?我希望在errorOccurredtrue时回滚整个事务。但是我不知道捕获Exception是否会吞下RuntimeException从而导致事务不回滚?这段代码还会回滚事务吗?

public static void main(String[] args) {
   try {
      // boring stuff...
      if(errorOccurred)
         throw new RuntimeException("RuntimeException is thrown.");
   } catch (Exception e) {
      System.out.println("RuntimeException cought. Does is still rollback transaction?");
   }
}

1 个答案:

答案 0 :(得分:2)

如果您的程序捕获到运行时异常,则意味着该异常尚未到达JEE容器,因此从JEE容器的角度来看,这是正常的程序执行,因此不会回滚事务。

如果要捕获运行时异常并回滚事务,则需要以编程方式回滚那些特定的运行时异常的事务。在会话bean中,它提供具有方法setRollbackOnly的sessioncontext对象,使用此方法,您可以通知容器回滚事务,而不会引发运行时异常。消息驱动的Bean还提供了消息驱动的上下文对象,该对象可用于进行事务跟踪[检查MDB https://docs.oracle.com/javaee/6/tutorial/doc/bnbpo.html]