Hi,

I've been reviewing a scenario the past couple of days. Consider the
following:

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 hear thoughts on this before I open a JIRA or provide a patch
for both scenarios to ensure I'm not overlooking something here.

Thanks,

Paul Nicolucci

Reply via email to