1つの永続ユニットと多くのEJB(サービスおよびDAOレイヤーとして)を含むEJBモジュールを備えたEARアプリケーションがあります。
@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:unitNamenullのEntityManagerFactoryを取得できません
このエラーはGlassfish3でのみ発生し、JBoss AS6では発生しません。JBossAS6を使用すると、起動時にHibernateログを確認できます(ただし、Glassfishでは表示されません)。
一時的な解決策として、以下の内容でステートレスBeanを作成しました。これは美しい解決策ではありませんが、Glassfishでは正常に機能します。
@Stateless
@Startup
public class AutoStartEntityManager {
@PersistenceContext
private EntityManager entityManager;
}
@Stateless
では、 DAOで使用していないときにGlassfishにEntityManagerを強制的に起動させるにはどうすればよいですか?