You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by Thusitha Thilina Dayaratne <th...@gmail.com> on 2015/05/19 15:09:23 UTC

NPE when webBeansContext.getApplicationBoundaryService() in AbstractProxyFactory

Hi,

I'm trying to upgrade tomee support in our server from tomee 1.6.0.3 to
1.7.2. SInce 1.7.2 is not released yet I'm using 1.7.2-SNAPSHOT.
After doing the changes when I deploy an simple CDI app it throws following
exception (I deployed and run the same app with 1.6.0.3 it works fine there)

ERROR {org.apache.catalina.core.StandardWrapperValve} -  Allocate exception
> for servlet HelloServlet
> java.lang.NullPointerException
> at
> org.apache.webbeans.proxy.AbstractProxyFactory.getProxyClassLoader(AbstractProxyFactory.java:81)
> at
> org.apache.webbeans.proxy.NormalScopeProxyFactory.createNormalScopeProxy(NormalScopeProxyFactory.java:122)
> at
> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:732)
> at
> org.apache.webbeans.portable.ProducerMethodProducer.produce(ProducerMethodProducer.java:105)
> at
> org.apache.webbeans.portable.AbstractProducer.produce(AbstractProducer.java:182)
> at
> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:121)
> at
> org.apache.webbeans.component.ProducerMethodBean.create(ProducerMethodBean.java:117)
> at
> org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:68)
> at
> org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125)
> at
> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:754)
> at
> org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:628)
> at
> org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:95)
> at
> org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65)
> at
> org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:208)
> at
> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:194)
> at
> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:184)
> at
> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:125)
> at org.apache.openejb.core.WebContext.newInstance(WebContext.java:138)
> at
> org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:46)
> at
> org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:66)
> at
> org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:61)
> at
> org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1148)
> at
> org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
> at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
> at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
> at
> org.wso2.carbon.statistics.webapp.RequestIntercepterValve.invoke(RequestIntercepterValve.java:47)
> at
> org.wso2.carbon.bam.webapp.stat.publisher.WebAppStatisticPublisherValve.invoke(WebAppStatisticPublisherValve.java:104)
> at
> org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:99)
> at
> org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47)
> at
> org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:57)
> at
> org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47)
> at
> org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:62)
> at
> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159)
> at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
> at
> org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
> at
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
> at
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
> at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1739)
> at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1698)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> at
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
> at java.lang.Thread.run(Thread.java:745)


After some debugging the both versions I found out that NPE is get thrown
because ApplicationBoundaryService applicationBoundaryService in the
WebBeansContext
is null.

The only possible place that I see where it get initialized is in the
overloaded constructor of the WebBeansContext.

Did I missed setting any configurations?
Can someone guide me on solving this?

Thanks
Best Regards
--

Re: NPE when webBeansContext.getApplicationBoundaryService() in AbstractProxyFactory

Posted by Thusitha Thilina Dayaratne <th...@gmail.com>.
Hi All,

I'm extremely sorry for the mistake. This should be sent to the
openwebbeans user groups.
Sorry again.

2015-05-19 18:39 GMT+05:30 Thusitha Thilina Dayaratne <
thusithathilina@gmail.com>:

> Hi,
>
> I'm trying to upgrade tomee support in our server from tomee 1.6.0.3 to
> 1.7.2. SInce 1.7.2 is not released yet I'm using 1.7.2-SNAPSHOT.
> After doing the changes when I deploy an simple CDI app it throws
> following exception (I deployed and run the same app with 1.6.0.3 it works
> fine there)
>
> ERROR {org.apache.catalina.core.StandardWrapperValve} -  Allocate
>> exception for servlet HelloServlet
>> java.lang.NullPointerException
>> at
>> org.apache.webbeans.proxy.AbstractProxyFactory.getProxyClassLoader(AbstractProxyFactory.java:81)
>> at
>> org.apache.webbeans.proxy.NormalScopeProxyFactory.createNormalScopeProxy(NormalScopeProxyFactory.java:122)
>> at
>> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:732)
>> at
>> org.apache.webbeans.portable.ProducerMethodProducer.produce(ProducerMethodProducer.java:105)
>> at
>> org.apache.webbeans.portable.AbstractProducer.produce(AbstractProducer.java:182)
>> at
>> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:121)
>> at
>> org.apache.webbeans.component.ProducerMethodBean.create(ProducerMethodBean.java:117)
>> at
>> org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:68)
>> at
>> org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125)
>> at
>> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:754)
>> at
>> org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:628)
>> at
>> org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:95)
>> at
>> org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65)
>> at
>> org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:208)
>> at
>> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:194)
>> at
>> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:184)
>> at
>> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:125)
>> at org.apache.openejb.core.WebContext.newInstance(WebContext.java:138)
>> at
>> org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:46)
>> at
>> org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:66)
>> at
>> org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:61)
>> at
>> org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1148)
>> at
>> org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)
>> at
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
>> at
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
>> at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
>> at
>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
>> at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
>> at
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>> at
>> org.wso2.carbon.statistics.webapp.RequestIntercepterValve.invoke(RequestIntercepterValve.java:47)
>> at
>> org.wso2.carbon.bam.webapp.stat.publisher.WebAppStatisticPublisherValve.invoke(WebAppStatisticPublisherValve.java:104)
>> at
>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:99)
>> at
>> org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47)
>> at
>> org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:57)
>> at
>> org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47)
>> at
>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:62)
>> at
>> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159)
>> at
>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
>> at
>> org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57)
>> at
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
>> at
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
>> at
>> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
>> at
>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
>> at
>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1739)
>> at
>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1698)
>> at
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>> at
>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>> at java.lang.Thread.run(Thread.java:745)
>
>
> After some debugging the both versions I found out that NPE is get thrown
> because ApplicationBoundaryService applicationBoundaryService in the WebBeansContext
> is null.
>
> The only possible place that I see where it get initialized is in the
> overloaded constructor of the WebBeansContext.
>
> Did I missed setting any configurations?
> Can someone guide me on solving this?
>
> Thanks
> Best Regards
> --
>
>



--

Re: NPE when webBeansContext.getApplicationBoundaryService() in AbstractProxyFactory

Posted by Mark Struberg <st...@yahoo.de>.
well, that should not happen of course ;)

I can give you a quick explanation what the ApplicationBoundaryService is for.
We use it to get the ClassLoader to use for a class we need to proxy.

Say if we create a CDI proxy (Contextual Reference) for a MyCustomCdiBean in your project then we usually take the ClassLoader of this class.

Now imagine you have a producer method:

private @PersistenceUnit(name=„myPu“) EntityManagerFactory emf;

@Produces
@RequestScoped
public EntityManager createEM() {
  return emf.createEntityManager();
}

In that case we would take the ClassLoader from EntityManager.class to create the proxy. But that would obviously create a mem leak. Thus we introduced an ‚outer boundary ClassLoader‘ which is the WebAppClassLoader of your webapp. Or in case of an EAR the EAR-ClassLoader.  Makes sense?

Do you have a sample application where we can reproduce this bug?

LieGrue,
strub

> Am 19.05.2015 um 15:09 schrieb Thusitha Thilina Dayaratne <th...@gmail.com>:
> 
> Hi,
> 
> I'm trying to upgrade tomee support in our server from tomee 1.6.0.3 to
> 1.7.2. SInce 1.7.2 is not released yet I'm using 1.7.2-SNAPSHOT.
> After doing the changes when I deploy an simple CDI app it throws following
> exception (I deployed and run the same app with 1.6.0.3 it works fine there)
> 
> ERROR {org.apache.catalina.core.StandardWrapperValve} -  Allocate exception
>> for servlet HelloServlet
>> java.lang.NullPointerException
>> at
>> org.apache.webbeans.proxy.AbstractProxyFactory.getProxyClassLoader(AbstractProxyFactory.java:81)
>> at
>> org.apache.webbeans.proxy.NormalScopeProxyFactory.createNormalScopeProxy(NormalScopeProxyFactory.java:122)
>> at
>> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:732)
>> at
>> org.apache.webbeans.portable.ProducerMethodProducer.produce(ProducerMethodProducer.java:105)
>> at
>> org.apache.webbeans.portable.AbstractProducer.produce(AbstractProducer.java:182)
>> at
>> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:121)
>> at
>> org.apache.webbeans.component.ProducerMethodBean.create(ProducerMethodBean.java:117)
>> at
>> org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:68)
>> at
>> org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125)
>> at
>> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:754)
>> at
>> org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:628)
>> at
>> org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:95)
>> at
>> org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65)
>> at
>> org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:208)
>> at
>> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:194)
>> at
>> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:184)
>> at
>> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:125)
>> at org.apache.openejb.core.WebContext.newInstance(WebContext.java:138)
>> at
>> org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:46)
>> at
>> org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:66)
>> at
>> org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:61)
>> at
>> org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1148)
>> at
>> org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)
>> at
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
>> at
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
>> at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
>> at
>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
>> at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
>> at
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>> at
>> org.wso2.carbon.statistics.webapp.RequestIntercepterValve.invoke(RequestIntercepterValve.java:47)
>> at
>> org.wso2.carbon.bam.webapp.stat.publisher.WebAppStatisticPublisherValve.invoke(WebAppStatisticPublisherValve.java:104)
>> at
>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:99)
>> at
>> org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47)
>> at
>> org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:57)
>> at
>> org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47)
>> at
>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:62)
>> at
>> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159)
>> at
>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
>> at
>> org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57)
>> at
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
>> at
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
>> at
>> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
>> at
>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
>> at
>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1739)
>> at
>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1698)
>> at
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>> at
>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>> at java.lang.Thread.run(Thread.java:745)
> 
> 
> After some debugging the both versions I found out that NPE is get thrown
> because ApplicationBoundaryService applicationBoundaryService in the
> WebBeansContext
> is null.
> 
> The only possible place that I see where it get initialized is in the
> overloaded constructor of the WebBeansContext.
> 
> Did I missed setting any configurations?
> Can someone guide me on solving this?
> 
> Thanks
> Best Regards
> --