2011-02-02 6 views
0

У меня есть приложение 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?

+0

Что случилось с лицами без DAO,? – axtavt

+0

См. Pascal ответ здесь: http://stackoverflow.com/questions/3223112/javaee6-dao-should-it-be-stateless-or-applicationscoped/3224607#3224607 –

ответ

1

Попробуйте указать явно UnitName:

@PersistenceContext(unitName="yourJPAUnitName") 
private EntityManager manager; 

(Sidenote - вы уверены, что вам нужно DAO в зависимости объема Если это не будет синглтон?)

+0

Я пробовал этот путь (с unitName), но без успеха (такая же проблема возникает). Я использую DAO как зависимый от наследования области от вызывающего. Я прав? С уважением. –

+0

да, но это будет означать, что у вас будет столько экземпляров DAO, что и вызывающие. И это не нужно. – Bozho