Я имею в Containter управляемой transaction- боба что-то вроде этого:javax.persistence.TransactionRequiredException после setRollbackOnly
@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) объясняется так, что не будет выбрано никаких таких исключений, и вместо этого вы должны проверить ejbContext.getRollbackOnly()
только до ресурсоемких операций.
Конечно, я мог бы в этом простом примере избежать проблемы, выбросив Exception, аннотированный @ApplicationException(rollback=true)
, но мне просто интересно, чего я пропустил.
Ну, это единственное объяснение для моего случая, но в документации на setRollBackOnly() ничего не написано о смене текущей транзакции (и ни в EJB 3.1 Specs) http: // docs .oracle.com/javaee/6/api/javax/ejb/EJBContext.html # setRollbackOnly% 28% 29 Поэтому я мог бы предположить, что это ошибка. Я попробовал это в Jboss 7.1.1. С каким AS вы это попробовали? –