2010-04-25 1 views
20

EJBs кажутся загруженными лениво - при доступе.Eager/автонагрузка EJB/нагрузки EJB при запуске (на JBoss)

Однако я хочу их инициализировать с нетерпением - т. Е. Всякий раз, когда запускается контейнер. Как это достигается (в частности, в JBoss)

This topic дает некоторые подсказки, но это не совсем удовлетворительно.

ответ

21

На EJB 3.1, одноэлементные бобы могут быть уведомлены о запуске модуля и остановках:

@Singleton 
@Startup 
public class StartupBean { 
    @PostConstruct 
    private void postConstruct() { /* ... */ } 

    @PreDestroy 
    private void preDestroy() { /* ... */ } 
} 

До EJB 3.1, нет стандарта, EJB-единственного решения. Я бы предложил добавить WAR к вашему EAR и использовать servlet-context-listener.

+0

Я нашел, что мое приложение в GlassFish 3.1, @Singleton @Startup EJB получило @PersistenceContext EntityManager, который закрыт. Мое обходное решение состояло в том, чтобы иметь таймер в том EJB, который выполняется через 2 секунды. (duh!) –

+3

Это звучит как ошибка для меня; Я бы рекомендовал сообщить об этом. –

17

Согласно Patterns Real World Java EE Адам Biên в - Переосмысление Best Practices (увидеть summary of the patterns) и шаблон Service Starter, это действительно, как bkail предполагает

  • с Java EE 6 = EJB 3.1 использование @Singleton с @Startup (и, возможно, также с @DependsOn)
  • до этого единственным стандартным и переносным способом является использование Servlet API, например HttpServlet, запускающий EJB в своем методе init() и загрузку при запуске, установленный в 1 в web.xml.

 Смежные вопросы

  • Нет связанных вопросов^_^