2010-04-25 8 views

Respuesta

21

A partir de EJB 3.1, frijoles simples pueden ser notificados del inicio de módulo y se detienen:

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

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

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

+0

Encontré que mi aplicación en GlassFish 3.1, @Singleton @Startup EJB tiene un @PersistenceContext EntityManager que está cerrado. Mi solución fue tener un temporizador en ese EJB que se ejecuta 2 segundos más tarde. (¡duh!) –

+3

Eso me suena a un error; Yo recomendaría reportarlo. –

17

De acuerdo con los patrones del mundo real de Java EE de Adam Bien - Repensar las mejores prácticas (véase A summary of the patterns) y el modelo de servicio de arranque, de hecho es como bkail sugiere

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