私の他の質問にいくらか関連しています。生のHibernate注釈付きPOJOをデータアクセス層から返す必要がありますか、それともインターフェイスから返す必要がありますか?、私はうまく分離されたレイヤーの作成の経験がありますが、HibernateまたはJ2EE/JPAを使用していません。私はドキュメントとチュートリアルを見てきましたが、EntityMangerをエレガントな方法で使用する方法に戸惑っています。これは、トランザクション(サービス層で実行したい)と永続化メソッド(必要な)の両方を担当しているように見えるためです。データアクセス層に保持するため)。サービス層で作成してデータアクセス層に注入する必要がありますか、それともより良い方法がありますか?以下の疑似Javaは、私が考えていることを大まかに示しています。
編集:以下の私の擬似コードは、基本的に休止状態のJPAチュートリアルから取得され、レイヤー分離用に変更されており、製品がEJBコンテナー(Glassfish)で実行するように開発されていることを反映していません。回答では、Glassfishまたは同等のコードで実行されるコードのベストプラクティスとコード例を示してください。
MyService
{
setup()
{
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory( "Something" ); //is the String you pass in important?
entityManager = entityManagerFactory.createEntityManager();
}
myServiceMethod()
{
entityManager.getTransaction().begin();
MyDao.setEntityManager(entityManagerFactory);
MyDao.doSomething();
MyDao.doSomethingElse();
entityManager.getTransaction().commit();
entityManager.close();
}
}
MyDao
{
doSomething()
{
entityManager.persist(...); //etc
}
}