Готовая / автоматическая загрузка EJB / загрузка EJB при запуске (на JBoss) - PullRequest
20 голосов
/ 25 апреля 2010

EJB загружаются лениво - при каждом обращении.

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

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

Ответы [ 2 ]

22 голосов
/ 25 апреля 2010

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

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

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

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

17 голосов
/ 29 апреля 2010

Согласно шаблонам Аэма Бина в реальном мире Java EE - переосмысление передового опыта (см. краткое изложение шаблонов ) и паттерну Service Starter, действительно, как предлагает bkail

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