JPA Toplink - 在流程开始时检查活动事务的需求是什么?

时间:2011-02-14 11:41:20

标签: java jpa transactions entitymanager toplink-essentials

我在互联网上看到很少的样本,检查交易是否在流程开始时处于活动状态。

下面的代码是我从工厂获取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(.....

1 个答案:

答案 0 :(得分:2)

我看不到任何进行事务检查的原因,因为代码使用的是JPA事务API,因为只是创建了EntityManager,所以无法激活事务。

如果您使用的是JTA托管的EntityManager,则JTA事务可能已处于活动状态。但是对于JTA,您不能使用JPA Transaction开始事务,您可以使用JTA开始事务,或者在JPA中使用joinTransaction()。