我在互联网上看到很少的样本,检查交易是否在流程开始时处于活动状态。
下面的代码是我从工厂获取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(.....
答案 0 :(得分:2)
我看不到任何进行事务检查的原因,因为代码使用的是JPA事务API,因为只是创建了EntityManager,所以无法激活事务。
如果您使用的是JTA托管的EntityManager,则JTA事务可能已处于活动状态。但是对于JTA,您不能使用JPA Transaction开始事务,您可以使用JTA开始事务,或者在JPA中使用joinTransaction()。