Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA Toplink-在流程开始时检查活动事务需要什么?_Java_Jpa_Transactions_Entitymanager_Toplink Essentials - Fatal编程技术网

Java JPA Toplink-在流程开始时检查活动事务需要什么?

Java JPA Toplink-在流程开始时检查活动事务需要什么?,java,jpa,transactions,entitymanager,toplink-essentials,Java,Jpa,Transactions,Entitymanager,Toplink Essentials,我在互联网上看到很少有样本检查交易在流程开始时是否处于活动状态 下面的代码是我从工厂获取EntityManager的代码 我不明白为什么需要在事务开始之前检查它是否处于活动状态() 是否因为其他进程可能正在使用同一EntityManager实例?(EntityManager工厂是singleton,但EntityManager不是) 我看不出进行事务检查的任何原因,因为代码使用的是JPA事务API,所以在刚刚创建EntityManager的情况下,事务无法处于活动状态 如果您使用的是JTA管理的

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

下面的代码是我从工厂获取EntityManager的代码

我不明白为什么需要在事务开始之前检查它是否处于活动状态()

是否因为其他进程可能正在使用同一EntityManager实例?(EntityManager工厂是singleton,但EntityManager不是)


我看不出进行事务检查的任何原因,因为代码使用的是JPA事务API,所以在刚刚创建EntityManager的情况下,事务无法处于活动状态

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

我没有使用JTA(在persistences.xml中禁用),但是根据我的研究和您的陈述,不需要在开始时进行isActive()检查,谢谢!
    @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(.....