У меня есть приложение EAR с модулем EJB, в котором содержится один блок непрерывности и множество EJB (как сервисный и DAO-уровень).Glassfish не вызывает EntityManager, если DAO не является безгражданским
@Stateless
public class BranchDAO {
@PersistenceContext
private EntityManager entityManager;
}
Но 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: Невозможно получить EntityManagerFactory для UnitName нуль
Эта ошибка возникает только в Glassfish 3, но не в JBoss AS 6. Использование JBoss AS 6 можно увидеть журналы Hibernate в запуске (но я не вижу их с Glassfish).
В качестве временного решения я создал фабулу без статуи с содержанием ниже. Это не красивое решение, но отлично работает в Glassfish.
@Stateless
@Startup
public class AutoStartEntityManager {
@PersistenceContext
private EntityManager entityManager;
}
Итак, как я могу заставить Glassfish воспитывать EntityManager, когда я не использую @Stateless
в моей DAO?
Что случилось с лицами без DAO,? – axtavt
См. Pascal ответ здесь: http://stackoverflow.com/questions/3223112/javaee6-dao-should-it-be-stateless-or-applicationscoped/3224607#3224607 –