2011-02-23 10 views
0

jta-data-sourceを定義した場合、どのようにJPAでトランザクションを取得できますか?JPAでの接続

よろしく、

サティヤ

答えて

3

JTAデータソースと、その接続上で行われた作業はJTAトランザクションの一部です。つまり、JTAトランザクションを開始してコミットまたはロールバックする必要があります。

これを行う最も簡単な方法は、セッションBean内のJPAの仕事をしていることである:

@Stateless 
public class SomeBean { 

    @PersistenceContext 
    private EntityManager entityManager; 

    public void doStuff() { 
     // … do some stuff 
     entityManager.persist(someObj); 
    } 
} 

この場合、トランザクションはdoStuff()方法を入力するときに開始し、それを離れるときに終了します。

しかし、あなたは、いくつかの理由のために、(例えばJSF管理対象Bean、サーブレット、サーブレットフィルタ、など)は、あなたが直接APIを使用することができます豆のいくつかの他のタイプに手動で取引を開始する場合:

public class SomeBean { 

    @Resource 
    private UserTransaction tx; 

    public void doStuff() { 
     try { 
      tx.begin(); 
      // … do some stuff 
      entityManager.persist(someObj); 
      tx.commit(); 
     } 
     catch (Throwable t) { 
      tx.rollback(); 
      throw t; 
     } 
    } 
} 

セッションBeanとそのいわゆる宣言型トランザクションの使用は、ほとんどの場合、常に推奨されるアプローチです。