Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 3FBBC200B6F for ; Wed, 24 Aug 2016 12:20:23 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 3E530160AB1; Wed, 24 Aug 2016 10:20:23 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 0B370160AA4 for ; Wed, 24 Aug 2016 12:20:21 +0200 (CEST) Received: (qmail 64327 invoked by uid 500); 24 Aug 2016 10:20:20 -0000 Mailing-List: contact commits-help@tomee.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@tomee.apache.org Delivered-To: mailing list commits@tomee.apache.org Received: (qmail 64308 invoked by uid 500); 24 Aug 2016 10:20:20 -0000 Delivered-To: apmail-openejb-commits@openejb.apache.org Received: (qmail 64303 invoked by uid 99); 24 Aug 2016 10:20:20 -0000 Received: from arcas.apache.org (HELO arcas) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 24 Aug 2016 10:20:20 +0000 Received: from arcas.apache.org (localhost [127.0.0.1]) by arcas (Postfix) with ESMTP id B97942C0151 for ; Wed, 24 Aug 2016 10:20:20 +0000 (UTC) Date: Wed, 24 Aug 2016 10:20:20 +0000 (UTC) From: =?utf-8?Q?T=C3=B5nis_Pool_=28JIRA=29?= To: commits@openejb.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Updated] (TOMEE-1913) CDI.current().getBeanManager() returns BeanManager of another webapp MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 archived-at: Wed, 24 Aug 2016 10:20:23 -0000 [ https://issues.apache.org/jira/browse/TOMEE-1913?page=3Dcom.atlassia= n.jira.plugin.system.issuetabpanels:all-tabpanel ] T=C3=B5nis Pool updated TOMEE-1913: ------------------------------ Description:=20 Took some time to figure this one out, but the javax.enterprise.inject.spi.= CDI integration point will return a bean manager of another webapp, when th= e current webapp doesn't have CDI enabled. This in turn will mess with JSF as it uses that integration point to detect= whether CDI is enabled or not. The end result is that TomEE hasn't started= CDI for the webapp, but JSF thinks it's available. To reproduce: 1) Download apps.zip from [here|https://drive.google.com/file/d/0B6RrEwQ40k= wddk84R2NINGw3alE/view?usp=3Dsharing], it contains 2 webapps as maven proje= cts 2) Package and deploy the "deploy-first" webapp to TomEE 7.0.1 3) Package and deploy the "BeanManager_bug" webapp to TomEE 7.0.1 4) Access $SERVER_URL/BeanManager_bug/, notice the {{NullPointerException}} 5) Access $SERVER_URL/BeanManager_bug/test, notice the "helloworld" bean am= ong the CDI beans, it's from the "deploy-first" webapp. I believe the problem is that MyFaces {{AbstractFacesInitializer#initCDIInt= egration}} calls the mentioned CDI.current().getBeanManager(), which should= fail, but actually will return "deploy-first" bean manager because of the = fallback algorithm in {{ThreadSingletonServiceImpl#get(final ClassLoader cl= )}}, which returns the WebBeansContext with the most beans in it. So for the "BeanManager_bug" webapp JSF thinks it has CDI, but actually doe= sn't, which means it will use the CDIManagedBeanHandlerImpl instead of the = DefaultViewScopeHandler, causing the NPE as a symptom. Just for reference, here's the NPE from accessing $SERVER_URL/BeanManager_b= ug/: {noformat} java.lang.NullPointerException =09org.apache.webbeans.web.context.WebContextsService.lazyStartSessionConte= xt(WebContextsService.java:815) =09org.apache.webbeans.web.context.WebContextsService.getSessionContext(Web= ContextsService.java:739) =09org.apache.webbeans.web.context.WebContextsService.getCurrentContext(Web= ContextsService.java:277) =09org.apache.webbeans.container.BeanManagerImpl.getContext(BeanManagerImpl= .java:287) =09org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getCont= extualInstance(NormalScopedBeanInterceptorHandler.java:88) =09org.apache.webbeans.intercept.SessionScopedBeanInterceptorHandler.getCon= textualInstance(SessionScopedBeanInterceptorHandler.java:76) =09org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.get(Nor= malScopedBeanInterceptorHandler.java:70) =09org.apache.myfaces.cdi.view.ViewScopeBeanHolder$$OwbNormalScopeProxy0.ge= nerateUniqueViewScopeId(org/apache/myfaces/cdi/view/ViewScopeBeanHolder.jav= a) =09org.apache.myfaces.cdi.impl.CDIManagedBeanHandlerImpl.generateViewScopeI= d(CDIManagedBeanHandlerImpl.java:92) =09org.apache.myfaces.view.ViewScopeProxyMap.getWrapped(ViewScopeProxyMap.j= ava:79) =09org.apache.myfaces.view.ViewScopeProxyMap.get(ViewScopeProxyMap.java:119= ) =09org.apache.myfaces.config.ManagedBeanBuilder.getScope(ManagedBeanBuilder= .java:564) =09org.apache.myfaces.config.ManagedBeanBuilder.getNarrowestScope(ManagedBe= anBuilder.java:464) =09org.apache.myfaces.config.ManagedBeanBuilder.isInValidScope(ManagedBeanB= uilder.java:435) =09org.apache.myfaces.config.ManagedBeanBuilder.initializeProperties(Manage= dBeanBuilder.java:319) =09org.apache.myfaces.config.ManagedBeanBuilder.buildManagedBean(ManagedBea= nBuilder.java:163) =09org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.createManaged= Bean(ManagedBeanResolver.java:333) =09org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.getValue(Mana= gedBeanResolver.java:296) =09javax.el.CompositeELResolver.getValue(CompositeELResolver.java:63) =09org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue= (FacesCompositeELResolver.java:179) =09org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:94) =09org.apache.el.parser.AstValue.getValue(AstValue.java:137) =09org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) =09org.apache.webbeans.el22.WrappedValueExpression.getValue(WrappedValueExp= ression.java:70) =09org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.getVa= lue(ContextAwareTagValueExpression.java:96) =09javax.faces.component._DeltaStateHelper.eval(_DeltaStateHelper.java:360) =09javax.faces.component.UIOutput.getValue(UIOutput.java:67) =09org.apache.myfaces.shared.renderkit.RendererUtils.getValue(RendererUtils= .java:486) =09org.apache.myfaces.shared.renderkit.RendererUtils.getStringValue(Rendere= rUtils.java:329) =09org.apache.myfaces.shared.renderkit.html.HtmlTextRendererBase.renderOutp= ut(HtmlTextRendererBase.java:86) =09org.apache.myfaces.shared.renderkit.html.HtmlTextRendererBase.encodeEnd(= HtmlTextRendererBase.java:73) =09javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:674= ) =09javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:554= ) =09javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:550= ) =09org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderVi= ew(FaceletViewDeclarationLanguage.java:1891) =09org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImp= l.java:313) =09javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper= .java:58) =09org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderRespon= seExecutor.java:116) =09org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:267= ) =09javax.faces.webapp.FacesServlet.service(FacesServlet.java:200) =09org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) =09org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:65) {noformat} was: Took some time to figure this one out, but the javax.enterprise.inject.spi.= CDI integration point will return a bean manager of another webapp, when th= e current webapp doesn't have CDI enabled. This in turn will mess with JSF as it uses that integration point to detect= whether CDI is enabled or not. The end result is that TomEE hasn't started= CDI for the webapp, but JSF thinks it's available. To reproduce: 1) Download apps.zip from [here|https://drive.google.com/file/d/0B6RrEwQ40k= wddk84R2NINGw3alE/view?usp=3Dsharing], it contains 2 webapps as maven proje= cts 2) Package and deploy the "deploy-first" webapp to TomEE 7.0.1 3) Package and deploy the "BeanManager_bug" webapp to TomEE 7.0.1 4) Access $SERVER_URL/BeanManager_bug/, notice the {{NullPointerException}} 5) Access $SERVER_URL/BeanManager_bug/test, notice the "helloworld" bean am= ong the CDI beans, it's from the "deploy-first" webapp. I believe the problem is that MyFaces {{AbstractFacesInitializer#initCDIInt= egration}} calls the mentioned CDI.current().getBeanManager(), which should= fail, but actually will return "deploy-first" bean manager because of the = fallback algorithm in {{ThreadSingletonServiceImpl#get(final ClassLoader cl= )}}, which returns the WebBeansContext with the most beans in it. So for the "BeanManager_bug" webapp JSF thinks it has CDI, but actually doe= sn't, which means it will use the CDIManagedBeanHandlerImpl instead of the = DefaultViewScopeHandler. Just for reference, here's the NPE from accessing $SERVER_URL/BeanManager_b= ug/: {noformat} java.lang.NullPointerException =09org.apache.webbeans.web.context.WebContextsService.lazyStartSessionConte= xt(WebContextsService.java:815) =09org.apache.webbeans.web.context.WebContextsService.getSessionContext(Web= ContextsService.java:739) =09org.apache.webbeans.web.context.WebContextsService.getCurrentContext(Web= ContextsService.java:277) =09org.apache.webbeans.container.BeanManagerImpl.getContext(BeanManagerImpl= .java:287) =09org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getCont= extualInstance(NormalScopedBeanInterceptorHandler.java:88) =09org.apache.webbeans.intercept.SessionScopedBeanInterceptorHandler.getCon= textualInstance(SessionScopedBeanInterceptorHandler.java:76) =09org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.get(Nor= malScopedBeanInterceptorHandler.java:70) =09org.apache.myfaces.cdi.view.ViewScopeBeanHolder$$OwbNormalScopeProxy0.ge= nerateUniqueViewScopeId(org/apache/myfaces/cdi/view/ViewScopeBeanHolder.jav= a) =09org.apache.myfaces.cdi.impl.CDIManagedBeanHandlerImpl.generateViewScopeI= d(CDIManagedBeanHandlerImpl.java:92) =09org.apache.myfaces.view.ViewScopeProxyMap.getWrapped(ViewScopeProxyMap.j= ava:79) =09org.apache.myfaces.view.ViewScopeProxyMap.get(ViewScopeProxyMap.java:119= ) =09org.apache.myfaces.config.ManagedBeanBuilder.getScope(ManagedBeanBuilder= .java:564) =09org.apache.myfaces.config.ManagedBeanBuilder.getNarrowestScope(ManagedBe= anBuilder.java:464) =09org.apache.myfaces.config.ManagedBeanBuilder.isInValidScope(ManagedBeanB= uilder.java:435) =09org.apache.myfaces.config.ManagedBeanBuilder.initializeProperties(Manage= dBeanBuilder.java:319) =09org.apache.myfaces.config.ManagedBeanBuilder.buildManagedBean(ManagedBea= nBuilder.java:163) =09org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.createManaged= Bean(ManagedBeanResolver.java:333) =09org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.getValue(Mana= gedBeanResolver.java:296) =09javax.el.CompositeELResolver.getValue(CompositeELResolver.java:63) =09org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue= (FacesCompositeELResolver.java:179) =09org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:94) =09org.apache.el.parser.AstValue.getValue(AstValue.java:137) =09org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) =09org.apache.webbeans.el22.WrappedValueExpression.getValue(WrappedValueExp= ression.java:70) =09org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.getVa= lue(ContextAwareTagValueExpression.java:96) =09javax.faces.component._DeltaStateHelper.eval(_DeltaStateHelper.java:360) =09javax.faces.component.UIOutput.getValue(UIOutput.java:67) =09org.apache.myfaces.shared.renderkit.RendererUtils.getValue(RendererUtils= .java:486) =09org.apache.myfaces.shared.renderkit.RendererUtils.getStringValue(Rendere= rUtils.java:329) =09org.apache.myfaces.shared.renderkit.html.HtmlTextRendererBase.renderOutp= ut(HtmlTextRendererBase.java:86) =09org.apache.myfaces.shared.renderkit.html.HtmlTextRendererBase.encodeEnd(= HtmlTextRendererBase.java:73) =09javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:674= ) =09javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:554= ) =09javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:550= ) =09org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderVi= ew(FaceletViewDeclarationLanguage.java:1891) =09org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImp= l.java:313) =09javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper= .java:58) =09org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderRespon= seExecutor.java:116) =09org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:267= ) =09javax.faces.webapp.FacesServlet.service(FacesServlet.java:200) =09org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) =09org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:65) {noformat} > CDI.current().getBeanManager() returns BeanManager of another webapp > -------------------------------------------------------------------- > > Key: TOMEE-1913 > URL: https://issues.apache.org/jira/browse/TOMEE-1913 > Project: TomEE > Issue Type: Bug > Components: TomEE Core Server > Reporter: T=C3=B5nis Pool > > Took some time to figure this one out, but the javax.enterprise.inject.sp= i.CDI integration point will return a bean manager of another webapp, when = the current webapp doesn't have CDI enabled. > This in turn will mess with JSF as it uses that integration point to dete= ct whether CDI is enabled or not. The end result is that TomEE hasn't start= ed CDI for the webapp, but JSF thinks it's available. > To reproduce: > 1) Download apps.zip from [here|https://drive.google.com/file/d/0B6RrEwQ4= 0kwddk84R2NINGw3alE/view?usp=3Dsharing], it contains 2 webapps as maven pro= jects > 2) Package and deploy the "deploy-first" webapp to TomEE 7.0.1 > 3) Package and deploy the "BeanManager_bug" webapp to TomEE 7.0.1 > 4) Access $SERVER_URL/BeanManager_bug/, notice the {{NullPointerException= }} > 5) Access $SERVER_URL/BeanManager_bug/test, notice the "helloworld" bean = among the CDI beans, it's from the "deploy-first" webapp. > I believe the problem is that MyFaces {{AbstractFacesInitializer#initCDII= ntegration}} calls the mentioned CDI.current().getBeanManager(), which shou= ld fail, but actually will return "deploy-first" bean manager because of th= e fallback algorithm in {{ThreadSingletonServiceImpl#get(final ClassLoader = cl)}}, which returns the WebBeansContext with the most beans in it. > So for the "BeanManager_bug" webapp JSF thinks it has CDI, but actually d= oesn't, which means it will use the CDIManagedBeanHandlerImpl instead of th= e DefaultViewScopeHandler, causing the NPE as a symptom. > Just for reference, here's the NPE from accessing $SERVER_URL/BeanManager= _bug/: > {noformat} > java.lang.NullPointerException > =09org.apache.webbeans.web.context.WebContextsService.lazyStartSessionCon= text(WebContextsService.java:815) > =09org.apache.webbeans.web.context.WebContextsService.getSessionContext(W= ebContextsService.java:739) > =09org.apache.webbeans.web.context.WebContextsService.getCurrentContext(W= ebContextsService.java:277) > =09org.apache.webbeans.container.BeanManagerImpl.getContext(BeanManagerIm= pl.java:287) > =09org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getCo= ntextualInstance(NormalScopedBeanInterceptorHandler.java:88) > =09org.apache.webbeans.intercept.SessionScopedBeanInterceptorHandler.getC= ontextualInstance(SessionScopedBeanInterceptorHandler.java:76) > =09org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.get(N= ormalScopedBeanInterceptorHandler.java:70) > =09org.apache.myfaces.cdi.view.ViewScopeBeanHolder$$OwbNormalScopeProxy0.= generateUniqueViewScopeId(org/apache/myfaces/cdi/view/ViewScopeBeanHolder.j= ava) > =09org.apache.myfaces.cdi.impl.CDIManagedBeanHandlerImpl.generateViewScop= eId(CDIManagedBeanHandlerImpl.java:92) > =09org.apache.myfaces.view.ViewScopeProxyMap.getWrapped(ViewScopeProxyMap= .java:79) > =09org.apache.myfaces.view.ViewScopeProxyMap.get(ViewScopeProxyMap.java:1= 19) > =09org.apache.myfaces.config.ManagedBeanBuilder.getScope(ManagedBeanBuild= er.java:564) > =09org.apache.myfaces.config.ManagedBeanBuilder.getNarrowestScope(Managed= BeanBuilder.java:464) > =09org.apache.myfaces.config.ManagedBeanBuilder.isInValidScope(ManagedBea= nBuilder.java:435) > =09org.apache.myfaces.config.ManagedBeanBuilder.initializeProperties(Mana= gedBeanBuilder.java:319) > =09org.apache.myfaces.config.ManagedBeanBuilder.buildManagedBean(ManagedB= eanBuilder.java:163) > =09org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.createManag= edBean(ManagedBeanResolver.java:333) > =09org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.getValue(Ma= nagedBeanResolver.java:296) > =09javax.el.CompositeELResolver.getValue(CompositeELResolver.java:63) > =09org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getVal= ue(FacesCompositeELResolver.java:179) > =09org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:94) > =09org.apache.el.parser.AstValue.getValue(AstValue.java:137) > =09org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:18= 4) > =09org.apache.webbeans.el22.WrappedValueExpression.getValue(WrappedValueE= xpression.java:70) > =09org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.get= Value(ContextAwareTagValueExpression.java:96) > =09javax.faces.component._DeltaStateHelper.eval(_DeltaStateHelper.java:36= 0) > =09javax.faces.component.UIOutput.getValue(UIOutput.java:67) > =09org.apache.myfaces.shared.renderkit.RendererUtils.getValue(RendererUti= ls.java:486) > =09org.apache.myfaces.shared.renderkit.RendererUtils.getStringValue(Rende= rerUtils.java:329) > =09org.apache.myfaces.shared.renderkit.html.HtmlTextRendererBase.renderOu= tput(HtmlTextRendererBase.java:86) > =09org.apache.myfaces.shared.renderkit.html.HtmlTextRendererBase.encodeEn= d(HtmlTextRendererBase.java:73) > =09javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:6= 74) > =09javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:5= 54) > =09javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:5= 50) > =09org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.render= View(FaceletViewDeclarationLanguage.java:1891) > =09org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerI= mpl.java:313) > =09javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapp= er.java:58) > =09org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResp= onseExecutor.java:116) > =09org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:2= 67) > =09javax.faces.webapp.FacesServlet.service(FacesServlet.java:200) > =09org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) > =09org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:65) > {noformat} -- This message was sent by Atlassian JIRA (v6.3.4#6332)