【问题标题】:How to configure a start up managed bean?如何配置启动托管bean?
【发布时间】:2012-07-13 13:31:46
【问题描述】:
我希望托管 bean 在应用程序加载时在我的 JSF Web 应用程序中启动时在内部运行。如何在 Glassfish 中编写此类并进行配置?
【问题讨论】:
-
你试过@ManagedBean(eager=true) 吗?如果您使用的是 CDI(@Named 而不是 @ManagedBean),那么您将不得不“观察”应用程序初始化......使用类似这样的东西......public void init(@Observes @Initialized WebApplication webApplication) { //do Something }(实际上我没有在 glassfish 中尝试过,我已经在jBoss AS 7,您可能需要在其他服务器上进行一些配置...检查this out...
标签:
jsf
startup
managed-bean
【解决方案1】:
在带有 CDI 的 JSF 中,observe 是 application scope 的 initialization。
@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() {
// ...
}
}
在带有 now deprecated javax.faces.bean 注释的 JSF 2.2 中,使用 application scoped managed bean 初始化 eagerly。
@ManagedBean(eager=true)
@ApplicationScoped
public class App {
@PostConstruct
public void startup() {
// ...
}
@PreDestroy
public void shutdown() {
// ...
}
}