You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org> on 2014/12/13 00:59:13 UTC

[jira] [Resolved] (MYFACES-3940) FlowScopeBeanHolder calls ApplicationContextBean on PreDestroy

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