Eager / carga automática de EJB / load EJB al inicio (en JBoss)

Los EJB parecen estar cargados de forma perezosa, siempre que se accede a ellos.

Sin embargo, quiero inicializarlos ansiosamente, es decir, cada vez que el contenedor se inicie. Cómo se logra esto (en JBoss en particular)

Este tema brinda algunos consejos, pero no es del todo satisfactorio.

A partir de EJB 3.1, los beans singleton pueden ser notificados del inicio y parada del módulo:

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

Antes de EJB 3.1, no hay una solución estándar, solo EJB. Sugeriría agregar una GUERRA a su EAR y usar un servlet-context-listener.

De acuerdo con los patrones Real EE de Java EE de Adam Bien – Repensando las mejores prácticas (ver un resumen de los patrones ) y el patrón de Service Starter, de hecho es como sugiere Bkail

  • con Java EE 6 = EJB 3.1 use @Singleton con @Startup (y quizás también con @DependsOn)
  • antes de eso, la única forma estándar y portátil es usar la API de Servlet, por ejemplo, un HttpServlet que inicia EJB en su método init () y load-on-startup establecido en 1 en web.xml.