[ https://issues.apache.org/jira/browse/TOMEE-1913?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Romain Manni-Bucau resolved TOMEE-1913. --------------------------------------- Resolution: Fixed Assignee: Romain Manni-Bucau Fix Version/s: 7.0.2 master should gave have fixes for that and the NPE, feedback welcomed > 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õnis Pool > Assignee: Romain Manni-Bucau > Fix For: 7.0.2 > > > 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 the 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/0B6RrEwQ40kwddk84R2NINGw3alE/view?usp=sharing], > it contains 2 webapps as maven projects > 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#initCDIIntegration}} 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 > doesn'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_bug/: > {noformat} > java.lang.NullPointerException > > org.apache.webbeans.web.context.WebContextsService.lazyStartSessionContext(WebContextsService.java:815) > > org.apache.webbeans.web.context.WebContextsService.getSessionContext(WebContextsService.java:739) > > org.apache.webbeans.web.context.WebContextsService.getCurrentContext(WebContextsService.java:277) > > org.apache.webbeans.container.BeanManagerImpl.getContext(BeanManagerImpl.java:287) > > org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getContextualInstance(NormalScopedBeanInterceptorHandler.java:88) > > org.apache.webbeans.intercept.SessionScopedBeanInterceptorHandler.getContextualInstance(SessionScopedBeanInterceptorHandler.java:76) > > org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.get(NormalScopedBeanInterceptorHandler.java:70) > > org.apache.myfaces.cdi.view.ViewScopeBeanHolder$$OwbNormalScopeProxy0.generateUniqueViewScopeId(org/apache/myfaces/cdi/view/ViewScopeBeanHolder.java) > > org.apache.myfaces.cdi.impl.CDIManagedBeanHandlerImpl.generateViewScopeId(CDIManagedBeanHandlerImpl.java:92) > > org.apache.myfaces.view.ViewScopeProxyMap.getWrapped(ViewScopeProxyMap.java:79) > > org.apache.myfaces.view.ViewScopeProxyMap.get(ViewScopeProxyMap.java:119) > > org.apache.myfaces.config.ManagedBeanBuilder.getScope(ManagedBeanBuilder.java:564) > > org.apache.myfaces.config.ManagedBeanBuilder.getNarrowestScope(ManagedBeanBuilder.java:464) > > org.apache.myfaces.config.ManagedBeanBuilder.isInValidScope(ManagedBeanBuilder.java:435) > > org.apache.myfaces.config.ManagedBeanBuilder.initializeProperties(ManagedBeanBuilder.java:319) > > org.apache.myfaces.config.ManagedBeanBuilder.buildManagedBean(ManagedBeanBuilder.java:163) > > org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.createManagedBean(ManagedBeanResolver.java:333) > > org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.getValue(ManagedBeanResolver.java:296) > javax.el.CompositeELResolver.getValue(CompositeELResolver.java:63) > > org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:179) > org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:94) > org.apache.el.parser.AstValue.getValue(AstValue.java:137) > org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) > > org.apache.webbeans.el22.WrappedValueExpression.getValue(WrappedValueExpression.java:70) > > org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.getValue(ContextAwareTagValueExpression.java:96) > javax.faces.component._DeltaStateHelper.eval(_DeltaStateHelper.java:360) > javax.faces.component.UIOutput.getValue(UIOutput.java:67) > > org.apache.myfaces.shared.renderkit.RendererUtils.getValue(RendererUtils.java:486) > > org.apache.myfaces.shared.renderkit.RendererUtils.getStringValue(RendererUtils.java:329) > > org.apache.myfaces.shared.renderkit.html.HtmlTextRendererBase.renderOutput(HtmlTextRendererBase.java:86) > > org.apache.myfaces.shared.renderkit.html.HtmlTextRendererBase.encodeEnd(HtmlTextRendererBase.java:73) > > javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:674) > > javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:554) > > javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:550) > > org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1891) > > org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:313) > > javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:58) > > org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:116) > > org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:267) > javax.faces.webapp.FacesServlet.service(FacesServlet.java:200) > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) > org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:65) > {noformat} -- This message was sent by Atlassian JIRA (v6.3.4#6332)