[ 
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)

Reply via email to