Java EE7 откат транзакции - PullRequest
       16

Java EE7 откат транзакции

0 голосов
/ 17 сентября 2018

Я знаю, что непроверенные исключения (RuntimeExceptions) обычно вызывают откат транзакции, но что произойдет, если вы перехватите это исключение в том же самом методе?Я хочу откат всей транзакции, когда errorOccurred равно true.Но мне интересно, если перехват 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 голосов
/ 17 сентября 2018

Если ваша программа перехватывает исключение времени выполнения, что означает, что исключение не достигло контейнера JEE, следовательно, с точки зрения контейнера JEE это нормальное выполнение программы, поэтому она не будет выполнять откат транзакции.

Если вы хотите перехватить исключение во время выполнения, а также откатить транзакцию, вам необходимо программно откатить транзакцию для этого конкретного исключения во время выполнения. В сессионном компоненте он предоставляет объект sessioncontext, который имеет метод setRollbackOnly, с помощью этого метода вы можете сообщить контейнеру об откате транзакции, не вызывая исключения времени выполнения. Компонент, управляемый сообщениями, также предоставляет объект messagedrivencontext, который можно использовать для отката транзакции [проверьте MDB https://docs.oracle.com/javaee/6/tutorial/doc/bnbpo.html]

...