[ 
https://issues.apache.org/jira/browse/MYFACES-3940?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Leonardo Uribe resolved MYFACES-3940.
-------------------------------------
       Resolution: Fixed
    Fix Version/s: 2.2.7
         Assignee: Leonardo Uribe

I have been thinking about this problem and I think we can just add a try{ 
}catch { } block to get that bean and if it fails, just write a message in the 
log and destroy the beans without an active FacesContext instance. Even if it 
is not a perfect solution from spec pespective (spec demands a FacesContext 
instance should be valid on @PreDestroy), most of the time there is not any 
call to FacesContext in that part. This is the best we can do, because after 
all the problematic @PreDestroy call happens when the server is shutdown.

> FlowScopeBeanHolder calls ApplicationContextBean on PreDestroy
> --------------------------------------------------------------
>
>                 Key: MYFACES-3940
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3940
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-344
>    Affects Versions: 2.2.5
>         Environment: WebSphere 8.5.5.3
>            Reporter: Sami Korhonen
>            Assignee: Leonardo Uribe
>             Fix For: 2.2.7
>
>
> Session scoped cdi bean FlowScopeBeanHolder relies on existance of 
> ApplicationContextBean. However, when application is shutdown there is no 
> guarantee that application scoped bean is destroyed after session scoped 
> bean. Because ApplicationContextBean no longer exists, application server to 
> throws an exception:
> [10.11.2014 10:06:50:511 EET] 00000072 ManagedBean   E ManagedBean error An 
> error occurred while executing [@PreDestroy.]
>                                  
> javax.enterprise.context.ContextNotActiveException: WebBeans context with 
> scope type annotation @ApplicationScoped does not exist within current thread
>       at 
> org.apache.webbeans.container.BeanManagerImpl.getContext(BeanManagerImpl.java:323)
>       at 
> org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getContextualInstance(NormalScopedBeanInterceptorHandler.java:124)
>       at 
> org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.invoke(NormalScopedBeanInterceptorHandler.java:95)
>       at 
> org.apache.myfaces.cdi.view.ApplicationContextBean_$$_javassist_28.getServletContext(ApplicationContextBean_$$_javassist_28.java)
>       at 
> org.apache.myfaces.flow.cdi.FlowScopeBeanHolder.destroyBeansOnPreDestroy(FlowScopeBeanHolder.java:210)



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

Reply via email to