Gdy metoda (transakcyjna) EJB wywołuje inną (transakcyjną) metodę innego EJB, a wyjątek jest zgłaszany w drugim, ale przechwycony w pierwszym, wydaje się, że transakcja jest automatycznie wycofane, gdy drugi powraca, nawet jeśli pierwszy go złapie, czy to prawda? jak mogę tego uniknąć?EJB: Unikanie wycofywania transakcji
Scenariusz jest następujący:
@Stateless
class ClassA {
@EJB
ClassB objectB;
methodA() {
try {
objectB.methodB();
}
catch(Exception e) {
//Here the transaction started in this method is
//automatically rolled back. Is this avoidable?
}
}
}
@Stateless
class ClassB {
methodB() throws Exception { throw new Exception() }
}
Moje złe, przepraszam, zmodyfikowałem pytanie, aby zauważyć, że rzuca zaznaczony wyjątek, czy transakcja została wycofana również w tym scenariuszu? – edutesoy
Nie, nie należy go wycofywać, jeśli wyjątek jest zaznaczonym wyjątkiem. –
Jeśli wszystko, co wiesz, że jest zaznaczony wyjątek, nie możesz powiedzieć, czy to będzie, czy nie spowoduje wycofania transakcji. Jeśli jest to '@ApplicationException (rollback = true)' może on przywrócić twoją transakcję. –