我在 Internet 上看到很少有示例在流程开始时检查事务当前是否处于 Activity 状态。
下面是我从工厂获取 EntityManager 的代码。
我不明白为什么需要在交易开始之前检查交易是否活跃???
是否因为其他一些进程可能正在使用相同的 EntityManager 实例? (EntityManagerFactory 是单例但 EntityManager 不是)
@Path("update")
@PUT
@Consumes("application/json")
public Response machineUpdate(String content) {
JSONObject jObj = null;
EntityManager em = null;
EntityTransaction txn = null;
try {
JSONObject jObj = new JSONObject(content);
em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager();
//what's this line doing here???
if(em.getTransaction().isActive()) {
return HttpStatusHandler.sendConflict();
}
txn = em.getTransaction();
txn.begin();
//more process ......
}
catch(.....
最佳答案
鉴于代码使用的是 JPA 事务 API,我看不出有任何理由进行事务检查,鉴于 EntityManager 刚刚创建,事务无法激活。
如果您使用的是 JTA 管理的 EntityManager,那么 JTA 事务可能已经处于 Activity 状态。但是对于 JTA,您不能使用 JPA Transaction 开始事务,您可以使用 JTA 开始事务,或者在 JPA 中使用 joinTransaction()。
关于java - JPA Toplink - 在流程开始时检查 Activity 事务的需要是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4991717/