これは私が現在持っているアーキテクチャの問題です。私はプロジェクトにEJBとJPAを統合するベストプラクティスに関して助けが必要です。自分のアプリケーションのビジネスロジックを含むサービスレイヤの仕事をするEJBを用意したいと思います。そのすぐ下に、DAOレイヤを用意して、EJBがDAOファクトリを使用して2つのレイヤを可能な限り分離するハンドルを持つようにしたいと考えています。それを知って、私は明らかに私は工場で作成されたいので、私はそれらを自動的に注入したくないので、EJBとして私のDAOを作ることができません。それはJPAと分離されたDAOとサービス層を持つEJBを使用する
Persistence.createEntityManagerFactory("PortalEJB").createEntityManager();
を使用して手動でEntityManagerを作成するために私をリードさて...このコールは私の抽象JPA DAOに位置しています:
public abstract class JPADataAccessorObject<K, E> implements DataAccessorObject<K, E> {
protected Class<E> entityClass;
protected EntityManager entityManager;
protected JPADataAccessorObject(Class<E> pEntityClass) {
this.entityManager = Persistence.createEntityManagerFactory("PortalEJB").createEntityManager();
this.entityClass = pEntityClass;
}
/* Other DAO functions (update, delete, create) */
}
私はこれが悪いだと思う、それはないですか?このクラスのすべての具体的なエクステントは、永続コンテキストの新しいコピーを持ち、私は奇妙な動作をします。また、私がそれをするとき、私はと思う私はサービス層で自分自身でトランザクションを管理する必要があります。
- トランザクションを作成します。私のような何かが、そのために側面を作成しようとしていましただからここに/手順
私の質問は以下のとおりです。
- 私はmanag必要がありますどのようにEntityManager?
- マルチスレッドから保護された1つのコピーを管理するJPAユーティリティー・クラスを用意する必要がありますか?
- 私が間違いを犯している場合は、ベストプラクティスを提供してください。
Java EEのどのバージョンですか? –
GlassFish 3.1でEJB 3.1、Java 1.6、JPA 2.0(EclipseLink)を使用しています –