Paul Nicolucci created MYFACES-4047:
---------------------------------------

             Summary: @PreDestroy method not invokved on 
javax.faces.bean.ViewScoped beans
                 Key: MYFACES-4047
                 URL: https://issues.apache.org/jira/browse/MYFACES-4047
             Project: MyFaces Core
          Issue Type: Bug
          Components: JSR-344
    Affects Versions: 2.2.10
            Reporter: Paul Nicolucci
            Priority: Minor


Consider the following scenario:

Bean1:
@Named
@ViewScoped (javax.faces.view.ViewScoped)

Bean2:
@ManagedBean
@ViewScoped (javax.faces.bean.ViewScoped)

When the session is invalidated the 
org.apache.myfaces.cdi.impl.CDIManagedBeanHandlerImpl.onSessionDestroyed() 
method is invoked. Here, MyFaces destroys all of the 
javax.faces.view.ViewScoped @Named beans and @PreDestroy is invoked on these 
beans. However, the @ManagedBean /ViewScoped bean does not have its @PreDestroy 
invoked.

I believe this is because the assumption was made that if an Application is CDI 
enabled it will contain all CDI @Named beans and not any @ManagedBeans. There 
is also the DefaultViewScopeHandler which is not yet implemented for 
"onSessionDestroyed" that would be used in the case when CDI is not enabled, 
that is when only @ManagedBeans are contained in the application.

I believe it is possible to update the CDIManagedBeanHandlerImpl to be aware of 
the ViewScoped ManagedBeans and destroy them onSessionDestroy first by just 
getting the viewMap and iterating over the entries as we do when the 
PreDestroyViewMapEvent is processed.

I'd like to use this issue to resolve the problem in CDIManagedBeanHandlerImpl 
as well as implement onSessionDestroy in DefaultViewScopeHandler.java





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to