我在Containter管理的事务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 4th edition书中(搜索“Doomed Transactions”或转到第299页)会对此进行解释,因为它不会抛出任何此类异常,而是应该检查{{1}只有在资源匮乏的运营之前。
当然,我可以在这个简单的例子中通过抛出一个用ejbContext.getRollbackOnly()
注释的Exception来避免这个问题,但我只是想知道我错过了什么。
答案 0 :(得分:0)
通过调用ejbContext.setRollbackOnly(),您已中止由容器启动的当前事务。之后,没有可以与em.persist(model2);相关联的事务。所以你得到一个例外。 要检查事务是否处于活动状态,请使用ejbcontext中的getRollbackOnly()方法返回false。