Ich habe Code wie im Schnipsel unten. Frage: Warum kann ich nicht die Ausnahme in method1 fangen, statt doSomeOtherStuff() aufgerufen wird (was im Falle einer Ausnahme verhindert werden sollte)EJB TransactionRolledBackException ist nicht abgefangen
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class EJBBean1 {
@EJB
private EJBBean2 ejb2;
public void method1(Produkt p){
try {
ejb2.method2(p)
doSomeOtherStuff();//is always called
}
catch(Exception e) {
//e is never catched here!!!
}
}
}
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class EJBBean2 {
@PersistenceContext(unitName = "scm")
protected EntityManager em;
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void method2(Produkt p) {
em.merge(p)//Exception rises here (in merge)
}
}
Blick auf die STAPEL TRACE der Ausnahme und es sagt Ihnen, wo es geworfen wird, die Ihnen sagt, wo Sie es fangen können –
Sie können die Stack-Trace enthalten? Wenn 'doSomeOtherStuff' aufgerufen wird, klingt es so, als ob die Ausnahme nicht von' method2' ausgelöst wird, sondern wenn die Transaktion in 'method1' endet. – hugh