2012-03-08 13 views
2

私は、FooBarModelImplのインスタンスを作成するJava EE 6サーブレットを持っています。このクラスは、JPAを使用していくつかのリソースを取得します。サーブレットからのJPAトランザクション

public class FooBarModelImpl 
{ 

    @Resource 
    UserTransaction ut; 

    @PersistenceContext(unitName="fooBarUnit") 
    private EntityManager em; 

    public void addPackage(UpgradePackageEntity p) 
    { 
     try{ 
      ut.begin(); 
      em.persist(p); 
      ut.commit(); 
     } catch (..) {} 
    } 
} 

永続ユニットがこのように設定されています。

<persistence-unit name="fooBarUnit" transaction-type="JTA"> 

私の質問はどのように私は手動でut.begin()ut.commit()に対処を取り除くことができますか? JPAを使用して、コンテナがトランザクション管理を処理するようにしたいと考えています。

答えて

1

安全にPersistenceContextを注入するには、クラスFooBarModelImplがコンテナによって管理されていることを確認する必要があります。この点についてはanswerを参照してください。

これが完了したら、トランザクションの境界がコンテナによって自動的に設定されるため、begin()とメソッドの呼び出しを削除するだけです。

UserTransactionオブジェクトへの参照を保持する必要はありません。

関連する問題