This content has been marked as final.
Show 2 replies
-
1. Re: PreDestroy not being invoked in Weld SE shutdown
aanderson Apr 20, 2011 9:33 PM (in response to aanderson)Perhaps because the reference is accessed outside the container through the BeanManager it must be manually destroyed in the same fashion it was created. This code works as expected.
CreationalContext<WebServer> webServerCtx; Bean<WebServer> webserverBean; WebServer webServer; public void afterDeploymentValidation(@Observes AfterDeploymentValidation adv, BeanManager bm) { Set<Bean<?>> beans = bm.getBeans(WebServer.class, new AnnotationLiteral<Any>() { }); if (beans.size() > 0) { webserverBean = (Bean<WebServer>)beans.iterator().next(); webServerCtx = bm.createCreationalContext(webserverBean); webServer = (WebServer)bm.getReference(webserverBean, WebServer.class, webServerCtx); } else { System.out.println("Can't find class " + WebServer.class); } } public void beforeShutdown(@Observes BeforeShutdown adv, BeanManager bm) { if (webServer!=null){ webserverBean.destroy(webServer, webServerCtx); } }
-
2. Re: PreDestroy not being invoked in Weld SE shutdown
bryncooke May 3, 2011 6:51 AM (in response to aanderson)Changing from Singleton to ApplicationScoped worked for me.