Hi Benjanmin, for a web application the payload of @Initialized(ApplicationScoped.class) must be the relevant ServletContext. That's why Weld is waiting for a webapp to be ready (implemented as javax.servlet.ServletContextListener.contextInitialized(ServletContextEvent)).
Martin Dne 19.8.2016 v 14:17 Benjamin Confino napsal(a): > We have a user scenario where we wishes to replace @Singleton @Startup > EJB beans with CDI beans. This was attempted by observing the > ApplicationScoped initialization event to trigger the replacement code. > > However, the event was fired only after the service invocation, which > was too late. Apparently OWB fires this event much earlier. > The CDI spec states: > > The /application context /is provided by a built-in context object for > the built-in scope type > @ApplicationScoped. The application scope is active: > • during the service() method of any servlet in the web application, > during the doFilter() > method of any servlet filter and when the container calls any > ServletContextListener, > HttpSessionListener, AsyncListener or ServletRequestListener, > • during any Java EE web service invocation, > • during any remote method invocation of any EJB, during any > asynchronous method invocation > of any EJB, during any call to an EJB timeout method and during message > delivery to any EJB > message-driven bean, > • when the disposer method or @PreDestroy callback of any bean with any > normal scope other > than @ApplicationScoped is called, and > *• during **@PostConstruct **callback of any bean.* > > The application context is shared between all servlet requests, web > service invocations, EJB > remote method invocations, EJB asynchronous method invocations, EJB > timeouts and message > deliveries to message-driven beans that execute within the same > application. The application > context is destroyed when the application is shut down. > > An event with qualifier @Initialized(ApplicationScoped.class) is fired > when the application > context is initialized and an event with qualifier > @Destroyed(ApplicationScoped.class) is fired > when the application is destroyed. The event payload is: > • the ServletContext if the application is a web application deployed to > a Servlet container, or > • any java.lang.Object for other types of application. > > How do you interpret "initialized"? Does it mean the event is fired only > after the context is *active?* > > Is it possible to make the event firing a bit earlier, say around > AfterDeploymentValidation? > > Below is the app to demonstrate the timing along with the server.xml: > > > > > And here is the results of running it > > > [AUDIT ] CWWKE0001I: The server defaultServer has been launched. > [AUDIT ] CWWKE0100I: This product is licensed for development, and > limited production use. The full license terms can be viewed here: > https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/license/base_ilan/ilan/16.0.0.2/lafiles/en.html > > [AUDIT ] CWWKZ0058I: Monitoring dropins for applications. > *---> ApplicationScopedExtension, AfterDeploymentValidation event > received, before looking up and touching @ApplicationScoped dummy bean* > *---> ApplicationScopedDummyBean, @PostConstruct init method called* > *---> ApplicationScopedExtension, after looking up and touching > @ApplicationScoped dummy bean* > [AUDIT ] CWWKT0016I: Web application available (default_host): > http://localhost:9080/70383.180.846.test-application/ > *---> ApplicationScopedObserverBean, observed > @Initialized(ApplicationScoped.class) event.* > [AUDIT ] CWWKZ0001I: Application 70383.180.846.test-application > started in 1.165 seconds. > [AUDIT ] CWWKF0012I: The server installed the following features: > [jsp-2.3, ejbLite-3.2, managedBeans-1.0, jsf-2.2, beanValidation-1.1, > servlet-3.1, ssl-1.0, jndi-1.0, jsonp-1.0, appSecurity-2.0, jdbc-4.1, > jaxrs-2.0, jaxrsClient-2.0, el-3.0, json-1.0, cdi-1.2, > distributedMap-1.0, webProfile-7.0, websocket-1.1, jpa-2.1]. > [AUDIT ] CWWKF0011I: The server defaultServer is ready to run a > smarter planet. > > As you can see, the *ApplicationScopedDummyBean, @PostConstruct init > method called*proves that the applicationContext was active before the > event was fired. Why is this applicationscoped initialization event not > fired earlier? > > > Regards > Benjamin > Unless stated otherwise above: > IBM United Kingdom Limited - Registered in England and Wales with number > 741598. > Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU > > Unless stated otherwise above: > IBM United Kingdom Limited - Registered in England and Wales with number > 741598. > Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU > > > _______________________________________________ > weld-dev mailing list > weld-dev@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/weld-dev > -- Martin Kouba Software Engineer Red Hat, Czech Republic _______________________________________________ weld-dev mailing list weld-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/weld-dev