2012-07-13 15 views
10

Quiero que un bean administrado se ejecute internamente en el inicio en mi aplicación web JSF cuando se carga la aplicación. ¿Cómo puedo escribir esta clase y configurar en Glassfish?¿Cómo configurar un bean gestionado de inicio?

+0

¿Has probado '@ManagedBean (eager = true)'? Si está utilizando CDI (@Named en lugar de @ManagedBean), entonces debería "observar" la inicialización de la aplicación ... con algo como esto ... 'public void init (@Observes @Initialized WebApplication webApplication) {//hacer algo} ' (en realidad no he probado esto en glassfish, lo he usado en jBoss AS 7 y es posible que necesite alguna configuración en otros servidores ... consulte [this] (http://stackoverflow.com/ preguntas/7347516/startup-pojo-on-a-weld-seam3-application) fuera ... – FMQ

Respuesta

16

En JSF con CDI, observe la initialization del application scope.

@Named 
@ApplicationScoped 
public class App { 

    public void startup(@Observes @Initialized(ApplicationScoped.class) Object context) { 
     // ... 
    } 

    public void shutdown(@Observes @Destroyed(ApplicationScoped.class) Object context) { 
     // ... 
    } 

} 

Al tener OmniFaces en las manos, esto se puede simplificar con @Eager.

@Named 
@Eager 
@ApplicationScoped 
public class App { 

    @PostConstruct 
    public void startup() { 
     // ... 
    } 

    @PreDestroy 
    public void shutdown() { 
     // ... 
    } 
} 

En JSF 2.2- con los now deprecatedjavax.faces.bean anotaciones, utilice un application scopedmanaged bean que es eagerly inicializado.

@ManagedBean(eager=true) 
@ApplicationScoped 
public class App { 

    @PostConstruct 
    public void startup() { 
     // ... 
    } 

    @PreDestroy 
    public void shutdown() { 
     // ... 
    } 
} 
Cuestiones relacionadas