11

I want a managed bean to run internally on start up in my JSF web application when the application loads. How can I write this class and configure in Glassfish?

BalusC
  • 992,635
  • 352
  • 3,478
  • 3,452
user1504940
  • 165
  • 4
  • 14
  • Have you tried `@ManagedBean(eager=true)` ? If you are using CDI (@Named instead of @ManagedBean) then you would have to "Observe" app initialization.. with something like this... `public void init(@Observes @Initialized WebApplication webApplication) { //do Something }` (actually I have not tried this in glassfish, I have used it in jBoss AS 7 and you might need some configuration on other servers...check [this](http://stackoverflow.com/questions/7347516/startup-pojo-on-a-weld-seam3-application) out... – FMQ Jul 13 '12 at 18:37

1 Answers1

19

In JSF with CDI, observe the initialization of the 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) {
        // ...
    }

}

When having OmniFaces at hands, this can be simplified with @Eager.

@Named
@Eager
@ApplicationScoped
public class App {

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

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

In JSF 2.2- with the now deprecated javax.faces.bean annotations, use an application scoped managed bean which is eagerly initialized.

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

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

    @PreDestroy
    public void shutdown() {
        // ...
    }
}
BalusC
  • 992,635
  • 352
  • 3,478
  • 3,452