import javax.inject.Named; import javax.enterprise.event.Observes; import javax.enterprise.context.*; @Named @ApplicationScoped public class DeploymentInfoBean { private Date deploymentTimestamp; public Date getDeploymentTimestamp() { return deploymentTimestamp; } void deploymentFinished( @Observes @Initialized(ApplicationScoped.class) ServletContext context) { deploymentTimestamp = new Date(); } }
Wer nur am Zeitpunkt interessiert ist und keine Werte aus dem ServletContext benötigt, kann sich als Parameter auch einfach ein Object übergeben lassen und beseitigt damit die Abhängigkeit zu javax.servlet.
Man kann sich nicht nur über die fertige Initialisierung eines Scopes informieren lassen, sondern auch über die Beendigung eines Scopes – und so beispielsweise Anfang und Ende von HTTP-Sessions überwachen:
public class SessionWatcher { void sessionCreated( @Observes @Initialized(SessionScoped.class) HttpSession session) { ... } void sessionDestroyed( @Observes @Destroyed(SessionScoped.class) HttpSession session) { ... } }