EJBモジュールを持つEARアプリケーションがあります。永続ユニットと多くのEJB(サービスとDAOレイヤー)が含まれています。DAOがステートレスでない場合、GlassfishはEntityManagerを起動しません。
@Stateless
public class BranchDAO {
@PersistenceContext
private EntityManager entityManager;
}
ステートレスBeanとしてのDAOは推奨されていません。だから私は、CDIを使用して、この注釈を作成します。
@Dependent
@Stereotype
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DAO {
}
私のDAOは@Stateless
を使用しないように変更された後:
@DAO
public class BranchDAO {
@PersistenceContext
private EntityManager entityManager;
}
しかし、アプリケーションの起動時にGlassfishのは、エンティティ・マネージャを起動しません。私がDAOを呼び出すと、エンティティマネージャは違法な状態です。
java.lang.IllegalStateException:
のunitNameのヌルのためのEntityManagerFactoryを取得できませんこのエラーは、Glassfishの3で発生しますが、6のJBoss ASを使用して6のJBoss ASに私は、Hibernateのログを見ることができません私はGlassfishでそれらを見ることはありません。
一時的な解決策として、以下の内容のステートレスBeanを作成しました。それは美しい解決策ではありませんが、Glassfishではうまく動作します。
@Stateless
@Startup
public class AutoStartEntityManager {
@PersistenceContext
private EntityManager entityManager;
}
だから、どのように私は私のDAOで@Stateless
を使用していない時にEntityManagerを起動するにはGlassfishのを強制することができますか?
? – axtavt
ここでパスカルの答えを参照してください:http://stackoverflow.com/questions/3223112/javaee6-dao-should-it-be-stateless-or-applicationscoped/3224607#3224607 –