EJBs, кажется, загружаются лениво - каждый раз, когда получено доступ.
Однако я хочу инициализировать их нетерпеливо - т.е. каждый раз, когда контейнер запускает. Как это достигается (в JBoss в особенности)
Эта тема дает некоторые подсказки, но не является довольно удовлетворительной.
Начиная с EJB 3.1, одноэлементные bean-компоненты могут получать уведомления о запуске и остановке модуля:
@Singleton
@Startup
public class StartupBean {
@PostConstruct
private void postConstruct() { /* ... */ }
@PreDestroy
private void preDestroy() { /* ... */ }
}
До EJB 3.1, стандартного решения, предназначенного только для EJB, не существует. Я бы предложил добавить WAR в ваш EAR и использовать прослушиватель контекста сервлета.
Согласно книге Адама Бьена «Real World Java EE Patterns - Rethinking Best Practices» (см. сводку шаблонов ) и паттерну Service Starter, это действительно так, как предлагает bkail