2012-07-13 56 views
10

我想要一個託管bean在應用程序加載時在我的JSF Web應用程序中啓動時在內部運行。我如何編寫這個類並在Glassfish中配置?如何配置啓動託管bean?

+0

你試過了@ManagedBean(eager = true)嗎? 如果你正在使用CDI(@Named而不是@ManagedBean),那麼你將不得不「觀察」應用程序的初始化......類似這樣的事情...... 'public void init(@Observes @Initialized WebApplication webApplication){//do Something}' (實際上我還沒有在glassfish上試過這個,我用它在jBoss AS 7中,你可能需要在其他服務器上進行一些配置... check [this](http://stackoverflow.com/ question/7347516/startup-pojo-on-a-weld-seam3-application)out ... – FMQ 2012-07-13 18:37:17

回答

16

在帶有CDI的JSF中,observeinitializationapplication scope

@Named 
@ApplicationScoped 
public class App { 

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

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

} 

具有OmniFaces在手中時,這可以用@Eager被簡化。

@Named 
@Eager 
@ApplicationScoped 
public class App { 

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

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

在JSF 2.2-與now deprecatedjavax.faces.bean註解,使用application scopedmanaged beaneagerly初始化。

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

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

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