我的代码就像下面的代码段一样。问题是:为什么我不能在method1中捕获异常,而是调用doSomeOtherStuff()(在异常的情况下应该防止)
@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)
}
}
答案 0 :(得分:1)
好的,回答我自己的问题; - )
异常确实在em.merge()中出现,但不会立即抛出。 JPA容器决定何时刷新()merge()。
如果我稍微改变一下代码:
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void method2(Produkt p) {
em.merge(p)
em.flush();//Exception rises here
}
我可以立即捕捉到异常。