Avanzamento / caricamento automatico di EJB / caricamento di EJB all’avvio (su JBoss)

Gli EJB sembrano essere caricati pigramente – ogni volta che si accede.

Tuttavia, voglio inizializzarli con entusiasmo, cioè ogni volta che il contenitore si avvia. Come è stato realizzato (in particolare in JBoss)

Questo argomento fornisce alcuni suggerimenti, ma non è abbastanza soddisfacente.

A partire da EJB 3.1, i bean singleton possono essere avvisati dell’avvio e dell’arresto del modulo:

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

Prima di EJB 3.1, non esiste una soluzione standard, EJB-only. Suggerirei di aggiungere un WAR al tuo EAR e usare un servlet-context-listener.

Secondo i modelli EE Real World Java di Adam Bien – Rethinking Best Practices (vedere un riepilogo dei pattern ) e il pattern di Starter di servizio, è proprio come suggerisce bkail

  • con Java EE 6 = EJB 3.1 usa @Singleton con @Startup (e forse anche con @DependsOn)
  • in precedenza, l’unico modo standard e portatile consiste nell’utilizzare l’API Servlet, ad esempio un HttpServlet che avvia gli EJB nel suo metodo init () e il carico di avvio impostato su 1 in web.xml.