Eager/автозагрузка EJB/нагрузки EJB при запуске (на JBoss)
EJB кажутся загруженными лениво - при каждом доступе.
Однако я хочу инициализировать их с нетерпением - то есть всякий раз, когда запускается контейнер. Как это достигается (в частности, в JBoss)
В этом разделе приведены некоторые подсказки, но это не совсем удовлетворительно.
Ответы
Ответ 1
Как и EJB 3.1, singleton beans может быть извещен о запуске и остановке модуля:
@Singleton
@Startup
public class StartupBean {
@PostConstruct
private void postConstruct() { /* ... */ }
@PreDestroy
private void preDestroy() { /* ... */ }
}
До EJB 3.1 нет стандартного решения EJB. Я бы предложил добавить WAR к вашему EAR и использовать сервлет-контекст-слушатель.
Ответ 2
В соответствии с Адамом Биеном Реальный мир Java EE Patterns - переосмысление лучших практик (см. резюме шаблонов) и шаблон Service Starter, это действительно, как предполагает bkail
- с Java EE 6 = EJB 3.1 использует @Singleton с @Startup (и, возможно, также с @DependsOn)
- до этого единственным стандартным и переносимым способом является использование Servlet API, например. HttpServlet, запускающий EJB в своем методе init() и загрузку при запуске, установленный в 1 в web.xml.