我的应用程序使用 Hibernate 作为 JPA 提供者,使用 JBOSS 6.1.0-final 作为服务器。事务是 CMT(我的 persistence.xml 中的事务类型是 JTA)。正如大多数教程所建议的那样。如果 ejb 方法中的事务没有任何异常结束,它将自动提交。但是,在我的应用程序中,除非我使用flush()
,否则当 ejb 方法成功结束时不会提交事务(例如,插入记录永远不会将任何数据推送到数据库)。无状态和有状态 bean 的结果相同。
我尝试使用@TransactionAttribute(TransactionAttributeType.REQUIRED)
,但结果也是一样的。即使使用MANDATORY
注释也不会引发任何异常,这表明我的 ejb 方法正在使用容器管理的事务。
代码片段:
@Stateful
@Local
public class TransactionTest implements ITransactionTest {
@PersistenceContext(unitName="Table")
private EntityManager manager;
public void generateRecord(int i) throws RuntimeException{
Record record = new Record();
record.setId(i+"");
record.setStatus(1);
manager.persist(record);
manager.flush(); //without this, it won't commit
}
}
那么,为什么我的 ejb 方法不能自动提交事务呢?