EntityManagerを挿入するための@PersistenceContextがないことと、トランザクションを手動で管理する必要があることを考慮すると、そのようなアプリケーションを設計する最良の方法?非Java EE Webサーバー(例えばTomcat)でJPAを設計する方法
EntityManagerFactory/EntityManagerについては、私が見る限り、各DAOには、EntityManagerを受け入れる必要があります。あなたはのEntityManager#の近くに()を呼び出すないときに上昇
public class DAOImpl implements DAO
{
private EntityManager em;
DAOImpl(EntityManager em){
this.em = em;
}
//all CRUD operations follow
}
最初の質問はありますか?
点A:私はそれを参照してください方法、あなたは現在のスレッドにEntityManagerを関連付けることを意味リクエストサイクルの終わりにFilterでこれをやったほうが良いです
(ThreadLocalのを使用していますか?)2番目の質問は、EntityManagerをいつ、どのように注入するのですか?
我々が作成してEntityManagerFactoryを閉じる
public static EntityManager createEntityManager(){
return entityManagerFactory.createEntityManager(PERSISTENT_NAME);
}
を次のように、我々は静的メソッドを持つことができますが、我々はDAOを作成するカプセル化したいので、私たちは、例えば、工場を使用することができServletContextListenerがある考慮
点Aあたりとして、私たちは現在のスレッドのEntityManagerを使用してDAOを作成するためにThreadLocalを使用する必要がありますpublic class DAOFactory
{
public static DAO dao(){
//return a new DAO
}
}
。
トランザクションを管理する。
私は(JPA仕様を模倣する)最も良い方法は、独自のトランザクションアノテーションを作成し、リフレクションを使用して開始/コミット/ロールバック操作を挿入することです。
あなたは、私はすべてのことをしないだろう取引
私は本当にポイントを見ることができませんが、これらは私に課せられた制限なので、これを実装する方法を見つけなければなりません。 – qnoid