2016-11-16 21:29 GMT+01:00 Adam Cornett <[email protected]>:

> Just coming up with ideas here: what if the listeners being iterated
> through in org.apache.catalina.core.StandardContext.
> fireRequestDestroyEvent
> are the issue?  If the facesContext/request/session is torn down before the
> owb listener OWB gets a chance to clean up the beans it could be causing a
> problem?  If the order of the iteration is not stable that could also
> explain why the issue is intermittent.
>
> There is actually a note about this in the MyFaces source
> (org.apache.myfaces.cdi.view.ViewScopeBeanHolder.destroyBeansOnPreDestroy)
> where they are dealing with differences between CDI implementations and
> mention Tomcat + OWB.
>
>
OWB listener insertion is normally forced (it is a tomee custom one BTW) so
this is stable.


>
> On Wed, Nov 16, 2016 at 12:09 PM, Adam Cornett <[email protected]>
> wrote:
>
> > Wouldn't that be easy :)
> >
> > I have not been able to reproduce this in a simple test case. After some
> > more testing on our app I have found that the first stack trace I posted
> is
> > actually generated when trying to render our custom error page.  When I
> > take the custom error page out the second error in OP (posted again
> below)
> > is the exception causing the problem.
> >
> >
> > org.apache.webbeans.component.ManagedBean - Exception thrown while
> > destroying bean instance : [ViewScopeBeanHolder, WebBeansType:MANAGED,
> > Name:null, API Types:[java.io.Serializable,java.lang.Object,org.apache.
> > myfaces.cdi.view.ViewScopeBeanHolder], Qualifiers:[javax.enterprise.
> > inject.Default,javax.enterprise.inject.Any]]
> > java.lang.NullPointerException: null
> > at org.apache.myfaces.cdi.view.ViewScopeContextImpl.destroyAllActive(
> > ViewScopeContextImpl.java:229)
> > at org.apache.myfaces.cdi.view.ViewScopeContextImpl.destroyAllActive(
> > ViewScopeContextImpl.java:223)
> > at org.apache.myfaces.cdi.view.ViewScopeBeanHolder.
> > destroyBeansOnPreDestroy(ViewScopeBeanHolder.java:221)
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > at sun.reflect.NativeMethodAccessorImpl.invoke(
> > NativeMethodAccessorImpl.java:62)
> > at sun.reflect.DelegatingMethodAccessorImpl.invoke(
> > DelegatingMethodAccessorImpl.java:43)
> > at java.lang.reflect.Method.invoke(Method.java:498)
> > at org.apache.webbeans.intercept.LifecycleInterceptorInvocation
> > Context.proceed(LifecycleInterceptorInvocationContext.java:103)
> > at org.apache.webbeans.portable.InjectionTargetImpl.preDestroy(
> > InjectionTargetImpl.java:352)
> > at org.apache.webbeans.component.AbstractOwbBean.destroy(
> > AbstractOwbBean.java:179)
> > at org.apache.webbeans.context.AbstractContext.destroyInstance(
> > AbstractContext.java:206)
> > at org.apache.webbeans.context.AbstractContext.destroyInstance(
> > AbstractContext.java:192)
> > at org.apache.webbeans.context.AbstractContext.destroy(
> > AbstractContext.java:218)
> > at org.apache.webbeans.web.context.WebContextsService.
> > destroyRequestContext(WebContextsService.java:408)
> > at org.apache.openejb.cdi.CdiAppContextsService.destroyRequestContext(
> > CdiAppContextsService.java:113)
> > at org.apache.webbeans.web.context.WebContextsService.
> > endContext(WebContextsService.java:223)
> > at org.apache.openejb.server.httpd.BeginWebBeansListener.
> requestDestroyed(
> > BeginWebBeansListener.java:99)
> > at org.apache.catalina.core.StandardContext.fireRequestDestroyEvent(
> > StandardContext.java:5965)
> > at org.apache.catalina.core.StandardHostValve.invoke(
> > StandardHostValve.java:182)
> > at org.apache.catalina.valves.ErrorReportValve.invoke(
> > ErrorReportValve.java:79)
> > at org.apache.tomee.catalina.OpenEJBSecurityListener$
> > RequestCapturer.invoke(OpenEJBSecurityListener.java:97)
> > at org.apache.catalina.core.StandardEngineValve.invoke(
> > StandardEngineValve.java:87)
> > at org.apache.catalina.connector.CoyoteAdapter.service(
> > CoyoteAdapter.java:349)
> > at org.apache.coyote.http11.Http11Processor.service(
> > Http11Processor.java:784)
> > at org.apache.coyote.AbstractProcessorLight.process(
> > AbstractProcessorLight.java:66)
> > at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(
> > AbstractProtocol.java:802)
> > at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.
> > doRun(NioEndpoint.java:1410)
> > at org.apache.tomcat.util.net.SocketProcessorBase.run(
> > SocketProcessorBase.java:49)
> > at java.util.concurrent.ThreadPoolExecutor.runWorker(
> > ThreadPoolExecutor.java:1142)
> > at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> > ThreadPoolExecutor.java:617)
> > at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(
> > TaskThread.java:61)
> > at java.lang.Thread.run(Thread.java:745)
> >
> > Looking an the MyFaces code it looks like the there is no active faces
> > instance (FacesContext.getCurrentInstance()) when it tries to destroy
> the
> > beans.
> >
> >
> > On Wed, Nov 16, 2016 at 10:51 AM, Romain Manni-Bucau <
> > [email protected]> wrote:
> >
> >> 2016-11-16 16:48 GMT+01:00 Adam Cornett <[email protected]>:
> >>
> >> > I don't think so.  This error will happen for even the simplest bean:
> we
> >> > have one 40 line class that just loads a list of JPA objects from the
> db
> >> > and sorts it for presentation and it triggers the issue too.  So far I
> >> have
> >> > seen this happen on at least 8 different view scoped beans across
> >> different
> >> > wars in our product.
> >> >
> >> >
> >> Does that mean it is easy to reproduce on a github project? 0:-)
> >>
> >>
> >> > I've been trying to sort this out for two days now and can't figure
> out
> >> if
> >> > it is caused by a change in our app or if there is something going on
> in
> >> > OWB/MyFaces/TomEE.  I've disabled tomcat session replication and the
> >> issue
> >> > still persists (although sometimes it takes many tries to get the
> issue
> >> to
> >> > manifest).
> >> >
> >> > We have session beans all over our application and those work fine, it
> >> is
> >> > just he viewscoped ones that can trigger the issue.  The intermittent
> >> > nature of the problem is also very confusing.  What sort of things
> >> could I
> >> > do in our application code that would cause the container to loose the
> >> > request?
> >> >
> >> >
> >> > On Wed, Nov 16, 2016 at 10:35 AM, Romain Manni-Bucau <
> >> > [email protected]>
> >> > wrote:
> >> >
> >> > > Normally the session is captured from the request. Is it possible
> you
> >> > loose
> >> > > the request when touching this bean somehow?
> >> > >
> >> > >
> >> > > Romain Manni-Bucau
> >> > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> >> > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> >> > > <http://rmannibucau.wordpress.com> | Github <https://github.com/
> >> > > rmannibucau> |
> >> > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> >> > > <https://javaeefactory-rmannibucau.rhcloud.com>
> >> > >
> >> > > 2016-11-16 15:51 GMT+01:00 Adam Cornett <[email protected]>:
> >> > >
> >> > > > Using TomEE 7.0.2 we are seeing intermittent problems with beans
> >> > > > using javax.faces.view.ViewScoped.
> >> > > > We have many pages that use @ViewScoped beans, but the behavior of
> >> this
> >> > > > issue is not predictable.  Sometimes we can login and not have any
> >> > issue
> >> > > at
> >> > > > all, sometimes it will only impact a single bean and all other
> >> > > @ViewScoped
> >> > > > beans will work fine, but when a bean starts throwing an error, it
> >> will
> >> > > > keep throwing the error until the user logs out (ends the servlet
> >> > > session)
> >> > > > and then when logging back it in may or may not happen again.
> >> > > >
> >> > > >
> >> > > > The primary error is below:
> >> > > > javax.enterprise.context.ContextNotActiveException: WebBeans
> >> context
> >> > > with
> >> > > > scope type annotation @SessionScoped does not exist within current
> >> > thread
> >> > > > at
> >> > > > org.apache.webbeans.container.BeanManagerImpl.getContext(
> >> > > > BeanManagerImpl.java:331)
> >> > > > at
> >> > > > org.apache.webbeans.intercept.NormalScopedBeanInterceptorHan
> >> > > > dler.getContextualInstance(NormalScopedBeanInterceptorHandle
> >> r.java:89)
> >> > > > at
> >> > > > org.apache.webbeans.intercept.SessionScopedBeanInterceptorHa
> >> > > > ndler.getContextualInstance(SessionScopedBeanInterceptorHa
> >> > ndler.java:76)
> >> > > > at
> >> > > > org.apache.webbeans.intercept.NormalScopedBeanInterceptorHan
> >> dler.get(
> >> > > > NormalScopedBeanInterceptorHandler.java:71)
> >> > > > at
> >> > > > org.apache.myfaces.cdi.view.ViewScopeBeanHolder$$OwbNormalSc
> >> opeProxy0.
> >> > > > generateUniqueViewScopeId(org/apache/myfaces/cdi/view/
> >> > > > ViewScopeBeanHolder.java)
> >> > > > at
> >> > > > org.apache.myfaces.cdi.impl.CDIManagedBeanHandlerImpl.
> >> > > generateViewScopeId(
> >> > > > CDIManagedBeanHandlerImpl.java:92)
> >> > > > at
> >> > > > org.apache.myfaces.view.ViewScopeProxyMap.getWrapped(
> >> > > > ViewScopeProxyMap.java:79)
> >> > > > at org.apache.myfaces.view.ViewScopeProxyMap.size(
> >> > > > ViewScopeProxyMap.java:99)
> >> > > > at javax.faces.component.UIViewRoot.saveState(
> UIViewRoot.java:1502)
> >> > > > at
> >> > > > org.apache.myfaces.renderkit.ErrorPageWriter._writeComponent(
> >> > > > ErrorPageWriter.java:851)
> >> > > > at
> >> > > > org.apache.myfaces.renderkit.ErrorPageWriter.debugHtml(
> >> > > > ErrorPageWriter.java:352)
> >> > > > at
> >> > > > org.apache.myfaces.renderkit.ErrorPageWriter.handle(
> >> > > > ErrorPageWriter.java:471)
> >> > > > at
> >> > > > org.apache.myfaces.context.MyFacesExceptionHandlerWrapperImp
> >> l.handle(
> >> > > > MyFacesExceptionHandlerWrapperImpl.java:301)
> >> > > > at
> >> > > > javax.faces.context.ExceptionHandlerWrapper.handle(
> >> > > > ExceptionHandlerWrapper.java:61)
> >> > > > at
> >> > > > org.apache.webbeans.jsf.OwbExceptionHandler.handle(
> >> > > > OwbExceptionHandler.java:61)
> >> > > > at org.apache.myfaces.lifecycle.LifecycleImpl.render(
> >> > > > LifecycleImpl.java:287)
> >> > > > at javax.faces.webapp.FacesServlet.service(FacesServlet.java:200)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> >> > > > ApplicationFilterChain.java:230)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(
> >> > > > ApplicationFilterChain.java:165)
> >> > > > at org.apache.tomcat.websocket.server.WsFilter.doFilter(
> >> > > WsFilter.java:52)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> >> > > > ApplicationFilterChain.java:192)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(
> >> > > > ApplicationFilterChain.java:165)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationDispatcher.invoke(
> >> > > > ApplicationDispatcher.java:726)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationDispatcher.processRequest(
> >> > > > ApplicationDispatcher.java:469)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationDispatcher.doForward(
> >> > > > ApplicationDispatcher.java:394)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationDispatcher.forward(
> >> > > > ApplicationDispatcher.java:311)
> >> > > > at
> >> > > > com.achalert.alert.security.servlets.LoginHandlerServlet.
> >> > processRequest(
> >> > > > LoginHandlerServlet.java:186)
> >> > > > at
> >> > > > com.achalert.alert.security.servlets.LoginHandlerServlet.
> >> > > > doPost(LoginHandlerServlet.java:371)
> >> > > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
> >> > > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> >> > > > ApplicationFilterChain.java:230)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(
> >> > > > ApplicationFilterChain.java:165)
> >> > > > at org.apache.tomcat.websocket.server.WsFilter.doFilter(
> >> > > WsFilter.java:52)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> >> > > > ApplicationFilterChain.java:192)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(
> >> > > > ApplicationFilterChain.java:165)
> >> > > > at org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.
> >> java:65)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> >> > > > ApplicationFilterChain.java:192)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(
> >> > > > ApplicationFilterChain.java:165)
> >> > > > at
> >> > > > com.achalert.alert.security.filters.SessionValidationFilter.
> >> doFilter(
> >> > > > SessionValidationFilter.java:134)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> >> > > > ApplicationFilterChain.java:192)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(
> >> > > > ApplicationFilterChain.java:165)
> >> > > > at
> >> > > > com.achalert.alert.http.OmnibusAchAlertFilter.doFilter(
> >> > > > OmnibusAchAlertFilter.java:161)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> >> > > > ApplicationFilterChain.java:192)
> >> > > > at
> >> > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(
> >> > > > ApplicationFilterChain.java:165)
> >> > > > at
> >> > > > org.apache.catalina.core.StandardWrapperValve.invoke(
> >> > > > StandardWrapperValve.java:198)
> >> > > > at
> >> > > > org.apache.catalina.core.StandardContextValve.invoke(
> >> > > > StandardContextValve.java:108)
> >> > > > at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.
> >> java:44)
> >> > > > at
> >> > > > org.apache.catalina.authenticator.AuthenticatorBase.invoke(
> >> > > > AuthenticatorBase.java:472)
> >> > > > at
> >> > > > org.apache.catalina.core.StandardHostValve.invoke(
> >> > > > StandardHostValve.java:140)
> >> > > > at
> >> > > > org.apache.catalina.valves.ErrorReportValve.invoke(
> >> > > > ErrorReportValve.java:79)
> >> > > > at
> >> > > > org.apache.tomee.catalina.OpenEJBSecurityListener$
> >> > > RequestCapturer.invoke(
> >> > > > OpenEJBSecurityListener.java:97)
> >> > > > at
> >> > > > org.apache.catalina.core.StandardEngineValve.invoke(
> >> > > > StandardEngineValve.java:87)
> >> > > > at
> >> > > > org.apache.catalina.connector.CoyoteAdapter.service(
> >> > > > CoyoteAdapter.java:349)
> >> > > > at
> >> > > > org.apache.coyote.http11.Http11Processor.service(
> >> > > Http11Processor.java:784)
> >> > > > at
> >> > > > org.apache.coyote.AbstractProcessorLight.process(
> >> > > > AbstractProcessorLight.java:66)
> >> > > > at
> >> > > > org.apache.coyote.AbstractProtocol$ConnectionHandler.process(
> >> > > > AbstractProtocol.java:802)
> >> > > > at
> >> > > > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.
> >> > > > doRun(NioEndpoint.java:1410)
> >> > > > at
> >> > > > org.apache.tomcat.util.net.SocketProcessorBase.run(
> >> > > > SocketProcessorBase.java:49)
> >> > > > at
> >> > > > java.util.concurrent.ThreadPoolExecutor.runWorker(
> >> > > > ThreadPoolExecutor.java:1142)
> >> > > > at
> >> > > > java.util.concurrent.ThreadPoolExecutor$Worker.run(
> >> > > > ThreadPoolExecutor.java:617)
> >> > > > at
> >> > > > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(
> >> > > > TaskThread.java:61)
> >> > > > at java.lang.Thread.run(Thread.java:745)
> >> > > >
> >> > > > I've also noticed that there is another error which may be
> related.
> >> > This
> >> > > > one is usually somewhere in the logs before the above error
> happens:
> >> > > > org.apache.webbeans.component.ManagedBean - Exception thrown
> while
> >> > > > destroying bean instance : [ViewScopeBeanHolder,
> >> WebBeansType:MANAGED,
> >> > > > Name:null, API
> >> > > > Types:[org.apache.myfaces.cdi.view.ViewScopeBeanHolder,java.
> >> > > > io.Serializable,java.lang.Object],
> >> > > > Qualifiers:[javax.enterprise.inject.Default,javax.
> >> > > enterprise.inject.Any]]
> >> > > > java.lang.NullPointerException: null
> >> > > > at
> >> > > > org.apache.myfaces.cdi.view.ViewScopeContextImpl.
> destroyAllActive(
> >> > > > ViewScopeContextImpl.java:229)
> >> > > > at
> >> > > > org.apache.myfaces.cdi.view.ViewScopeContextImpl.
> destroyAllActive(
> >> > > > ViewScopeContextImpl.java:223)
> >> > > > at
> >> > > > org.apache.myfaces.cdi.view.ViewScopeBeanHolder.
> >> > > destroyBeansOnPreDestroy(
> >> > > > ViewScopeBeanHolder.java:221)
> >> > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >> > > > at
> >> > > > sun.reflect.NativeMethodAccessorImpl.invoke(
> >> > > NativeMethodAccessorImpl.java:
> >> > > > 62)
> >> > > > at
> >> > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(
> >> > > > DelegatingMethodAccessorImpl.java:43)
> >> > > > at java.lang.reflect.Method.invoke(Method.java:498)
> >> > > > at
> >> > > > org.apache.webbeans.intercept.LifecycleInterceptorInvocation
> >> > > > Context.proceed(LifecycleInterceptorInvocationContext.java:103)
> >> > > > at
> >> > > > org.apache.webbeans.portable.InjectionTargetImpl.preDestroy(
> >> > > > InjectionTargetImpl.java:352)
> >> > > > at
> >> > > > org.apache.webbeans.component.AbstractOwbBean.destroy(
> >> > > > AbstractOwbBean.java:179)
> >> > > > at
> >> > > > org.apache.webbeans.context.AbstractContext.destroyInstance(
> >> > > > AbstractContext.java:206)
> >> > > > at
> >> > > > org.apache.webbeans.context.AbstractContext.destroyInstance(
> >> > > > AbstractContext.java:192)
> >> > > > at
> >> > > > org.apache.webbeans.context.AbstractContext.destroy(
> >> > > > AbstractContext.java:218)
> >> > > > at
> >> > > > org.apache.webbeans.web.context.WebContextsService.
> >> > > destroyRequestContext(
> >> > > > WebContextsService.java:408)
> >> > > > at
> >> > > > org.apache.openejb.cdi.CdiAppContextsService.
> destroyRequestContext(
> >> > > > CdiAppContextsService.java:113)
> >> > > > at
> >> > > > org.apache.webbeans.web.context.WebContextsService.
> >> > > > endContext(WebContextsService.java:223)
> >> > > > at
> >> > > > org.apache.openejb.server.httpd.BeginWebBeansListener.
> >> > requestDestroyed(
> >> > > > BeginWebBeansListener.java:99)
> >> > > > at
> >> > > > org.apache.catalina.core.StandardContext.fireRequestDestroyEvent(
> >> > > > StandardContext.java:5965)
> >> > > > at
> >> > > > org.apache.catalina.core.StandardHostValve.invoke(
> >> > > > StandardHostValve.java:182)
> >> > > > at
> >> > > > org.apache.catalina.valves.ErrorReportValve.invoke(
> >> > > > ErrorReportValve.java:79)
> >> > > > at
> >> > > > org.apache.tomee.catalina.OpenEJBSecurityListener$
> >> > > RequestCapturer.invoke(
> >> > > > OpenEJBSecurityListener.java:97)
> >> > > > at
> >> > > > org.apache.catalina.core.StandardEngineValve.invoke(
> >> > > > StandardEngineValve.java:87)
> >> > > > at
> >> > > > org.apache.catalina.connector.CoyoteAdapter.service(
> >> > > > CoyoteAdapter.java:349)
> >> > > > at
> >> > > > org.apache.coyote.http11.Http11Processor.service(
> >> > > Http11Processor.java:784)
> >> > > > at
> >> > > > org.apache.coyote.AbstractProcessorLight.process(
> >> > > > AbstractProcessorLight.java:66)
> >> > > > at
> >> > > > org.apache.coyote.AbstractProtocol$ConnectionHandler.process(
> >> > > > AbstractProtocol.java:802)
> >> > > > at
> >> > > > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.
> >> > > > doRun(NioEndpoint.java:1410)
> >> > > > at
> >> > > > org.apache.tomcat.util.net.SocketProcessorBase.run(
> >> > > > SocketProcessorBase.java:49)
> >> > > > at
> >> > > > java.util.concurrent.ThreadPoolExecutor.runWorker(
> >> > > > ThreadPoolExecutor.java:1142)
> >> > > > at
> >> > > > java.util.concurrent.ThreadPoolExecutor$Worker.run(
> >> > > > ThreadPoolExecutor.java:617)
> >> > > > at
> >> > > > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(
> >> > > > TaskThread.java:61)
> >> > > > at java.lang.Thread.run(Thread.java:745)
> >> > > >
> >> > > >
> >> > > >
> >> > > > Adam Cornett
> >> > > >
> >> > >
> >> >
> >> >
> >> >
> >> > --
> >> > Adam Cornett
> >> > [email protected]
> >> > (678) 296-1150
> >> >
> >>
> >
> >
> >
> > --
> > Adam Cornett
> > [email protected]
> > (678) 296-1150
> >
>
>
>
> --
> Adam Cornett
> [email protected]
> (678) 296-1150
>

Reply via email to