我在一个容器管理的事务 bean 中是这样的:
@PersistenceContext
private EntityManager em;
@Resource
private EJBContext ejbContext;
public void testTransaction() {
Model model1 = new Model();
em.persist(model1);
ejbContext.setRollbackOnly();
Model model2 = new Model();
em.persist(model2);//the line the problem
}
在最后一行(有问题)抛出 TransactionRequiredException:
javax.ejb.EJBException: javax.persistence.TransactionRequiredException: JBAS011469: Transaction is required to perform this operation (either use a transaction or extended persistence context)
但在Mastering EJB 第 4 版一书中(搜索“Doomed Transactions”或转到第 299 页)中是这样解释的,因为它不会引发任何此类异常,相反,您应该ejbContext.getRollbackOnly()
只在需要资源的操作之前检查。
当然,在这个简单的示例中,我可以通过抛出一个带有注释的异常来避免这个问题@ApplicationException(rollback=true)
,但我只是想知道我错过了什么。