[ https://issues.apache.org/jira/browse/WW-5089?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17197384#comment-17197384 ]
Aleksandr Mashchenko commented on WW-5089: ------------------------------------------ I'm no 100% sure about this, but I think the cdi plugin by default doesn't create a full-blown bean out of actions. It allows injections to actions, but that's it. Annotations and @PreDestroy are not going to work on actions unless you create a proper bean out of it by yourself. [~bartlomiej-kfn] Try to create a bean from action with @RequestScoped and *use* it, then @PreDestroy on your CDIBean should work. > @PreDestroy callbacks not invoked on injected beans > --------------------------------------------------- > > Key: WW-5089 > URL: https://issues.apache.org/jira/browse/WW-5089 > Project: Struts 2 > Issue Type: Bug > Components: Plugin - CDI > Affects Versions: 2.5.22 > Environment: Apache Tomcat 9.0.31, Open JDK 13.0.2 > Reporter: Bartłomiej N > Priority: Major > > I have web app deployed on tomcat with: > {code:xml} > <dependency> > <groupId>org.apache.struts</groupId> > <artifactId>struts2-core</artifactId> > <version>2.5.22</version> > </dependency> > <dependency> > <groupId>org.apache.struts</groupId> > <artifactId>struts2-cdi-plugin</artifactId> > <version>2.5.22</version> > </dependency> > <dependency> > <groupId>org.jboss.weld.servlet</groupId> > <artifactId>weld-servlet-core</artifactId> > <version>3.1.5.Final</version> > </dependency> > {code} > and: > {code:xml} > <listener> > <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class> > </listener> > <resource-env-ref> > <resource-env-ref-name>BeanManager</resource-env-ref-name> > <resource-env-ref-type> > javax.enterprise.inject.spi.BeanManager > </resource-env-ref-type> > </resource-env-ref> > {code} > > as CDI bootstrap in web.xml and empty beans.xml in META-INF directory. There > is also context.xml for Tomcat in webapp/META-INF: > {code:xml} > <?xml version='1.0' encoding='utf-8'?> > <Context> > <Resource name="BeanManager" > auth="Container" > type="javax.enterprise.inject.spi.BeanManager" > factory="org.jboss.weld.resources.ManagerObjectFactory"/> > </Context> > {code} > In app there is a simple CDI bean: > {code:java} > public class CDIBean { > @PostConstruct > private void postConstruct() { > //some code > } > @PreDestroy > private void preDestroy() { > //some code > } > } > {code} > when is use it in Struts action: > {code:java} > class MyAction extends ActionSupport implements SessionAware { > @Inject > private CDIBean bean; > Strign execute() { > //some code > } > } > {code} > @postConstruct callback is invoked and bean is injected correctly, but after > request completion @preDestroy is not invoked. -- This message was sent by Atlassian Jira (v8.3.4#803005)