2011-02-14 7 views
2

私はインターネット上で、トランザクションがプロセスの開始時に現在アクティブであるかどうかをチェックするサンプルをほとんど見ていません。JPA Toplink - プロセスの開始時にアクティブなトランザクションをチェックする必要はありますか?

私の下のコードは、工場からEntityManagerを取得します。

私は理解できませんなぜトランザクションがアクティブであるかどうかをチェックする必要がありますか?

他のプロセスが同じEntityManagerインスタンスを使用している可能性がありますか? (のEntityManagerFactoryはシングルトンですが、EntityManagerのではありません)私はコードがJPAトランザクションAPIを使用している特定のトランザクションチェックするための任意の理由を見ることができない

@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(..... 

答えて

2

、アクティブ与えられるべき取引のための方法はありませんEntityManagerが作成されました。

JTA管理のEntityManagerを使用していた場合、JTAトランザクションはすでにアクティブになっている可能性があります。しかし、JTAでは、JPA Transactionを使用してトランザクションを開始することはできません.JTAを使用してトランザクションを開始するか、JPAでjoinTransaction()を使用します。

+0

私はJTAを使用していません(persistences.xmlで無効になっています)が、私の研究とあなたの声明に基づいて、isActive()チェックは最初は必要ありません。 –

関連する問題