我的运行时异常
@ApplicationException(rollback=false)
public class UncheckedException extends RuntimeException {}
我的EJB代码
@Stateless
@Transactional(TxType.REQUIRES_NEW)
public class ContainerManagedTransactionBean {
@PersistenceContext EntityManager em;
public void insertAndThrowUnchecked() throws UncheckedException {
em.persist(new Entry());
throw new UncheckedException();
}
}
我的另一个EJB是客户端
@Singleton
@Startup
@Transactional(TxType.NOT_SUPPORTED)
public class Start {
@EJB
ContainerManagedTransactionBean bean;
@PostConstruct
public void start() {
//...
try {
bean.insertAndThrowUnchecked();
} catch (Exception e) {
System.out.println("Start unchecked exception catched");
}
}
有人可以解释为什么insertAndThrowUnchecked
会回滚吗?
在类似情况下,检查异常时
@ApplicationException(rollback=false)
public class CheckedException extends Exception {}
交易已经提交。
工作示例位于this GitHub link。
我将很感激清楚解释并链接到EJB规范的适当部分
答案 0 :(得分:1)
根据EJB 3.2规范的第7.1节:
关联JTA事务拦截器是违法的(见[8]) 使用Enterprise JavaBeans。 EJB容器应该部署失败 这样的申请。[39]
[39]此限制可能会在本规范的未来版本中删除。
由于@Transactional
注释被错误地用于在EJB上指定JTA事务拦截器,因此@ApplicationException
注释无效。请尝试使用@TransactionAttribute
注释。