Thanks Daniel.
Are CXF client proxies thread safe? thanks, Venkat ________________________________ From: Daniel Kulp <[email protected]> Sent: Monday, May 1, 2017 6:16:19 PM To: [email protected]; venkatesham nalla Subject: Re: CXF v2.7.14 JAXB blocked threads and degraded performance This stack trace looks like it’s during creating a client proxy. Is that something you do a lot? If so, you really should either pool the proxies or use them in some other thread safe manner to avoid creating them all the time. Creating them is expensive and involves several locks. In this particular case, it’s creating a JAXB context. In theory, the context cache can hold onto and share the JAXB contexts between multiple client proxies, but if the proxies are discarded and not held onto, the cache would clear as well and contexts would need to be re-created. Dan > On May 1, 2017, at 11:35 AM, venkatesham nalla <[email protected]> wrote: > > degraded performance with CXF v2.7.14 with bunch of threads in BLOCKED state > waiting to lock <0x0000000685890f28> (a > com.sun.xml.bind.v2.runtime.reflect.opt.Injector) with the following > stacktrace, teh thread that is holding the lock is in Runnable state. Is this > a bug or how do get around this performance issue? > > > "pool-11-thread-163" #4455 prio=5 os_prio=0 tid=0x00007f736c089000 nid=0x8335 > waiting for monitor entry [0x00007f72e01f1000] > java.lang.Thread.State: BLOCKED (on object monitor) > at > com.sun.xml.bind.v2.runtime.reflect.opt.Injector.find(Injector.java:202) > - waiting to lock <0x0000000685890f28> (a > com.sun.xml.bind.v2.runtime.reflect.opt.Injector) > at > com.sun.xml.bind.v2.runtime.reflect.opt.Injector.find(Injector.java:96) > at > com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector.prepare(AccessorInjector.java:77) > at > com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:165) > at > com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection.optimize(Accessor.java:256) > at > com.sun.xml.bind.v2.runtime.property.SingleElementLeafProperty.<init>(SingleElementLeafProperty.java:81) > at sun.reflect.GeneratedConstructorAccessor115.newInstance(Unknown > Source) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:422) > at > com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:124) > at > com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:175) > at > com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:490) > at > com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:509) > at > com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.<init>(ArrayElementProperty.java:108) > at > com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.<init>(ArrayElementNodeProperty.java:58) > at sun.reflect.GeneratedConstructorAccessor117.newInstance(Unknown > Source) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:422) > at > com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:124) > at > com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:175) > at > com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:490) > at > com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:509) > at > com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.<init>(ArrayElementProperty.java:108) > at > com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.<init>(ArrayElementNodeProperty.java:58) > at sun.reflect.GeneratedConstructorAccessor117.newInstance(Unknown > Source) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:422) > at > com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:124) > at > com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:175) > at > com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:490) > at > com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:509) > at > com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.<init>(SingleElementNodeProperty.java:101) > at sun.reflect.GeneratedConstructorAccessor116.newInstance(Unknown > Source) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:422) > at > com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:124) > at > com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:175) > at > com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:490) > at > com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:509) > at > com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.<init>(SingleElementNodeProperty.java:101) > at sun.reflect.GeneratedConstructorAccessor116.newInstance(Unknown > Source) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:422) > at > com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:124) > at > com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:175) > at > com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:490) > at > com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:509) > at > com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.<init>(SingleElementNodeProperty.java:101) > at sun.reflect.GeneratedConstructorAccessor116.newInstance(Unknown > Source) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:422) > at > com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:124) > at > com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:175) > at > com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:490) > at > com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:316) > at > com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1111) > at > com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:154) > at > com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:121) > at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:497) > at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:211) > at javax.xml.bind.ContextFinder.find(ContextFinder.java:392) > at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:618) > at > org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:345) > at > org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:343) > at java.security.AccessController.doPrivileged(Native Method) > at > org.apache.cxf.common.jaxb.JAXBContextCache.createContext(JAXBContextCache.java:343) > at > org.apache.cxf.common.jaxb.JAXBContextCache.getCachedContextAndSchemas(JAXBContextCache.java:244) > at > org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContextAndSchemas(JAXBDataBinding.java:484) > at > org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:339) > - locked <0x000000069ce6ad38> (a org.apache.cxf.jaxb.JAXBDataBinding) > at > org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86) > at > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL(ReflectionServiceFactoryBean.java:446) > at > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:548) > at > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:265) > - locked <0x00000006df01ed90> (a > org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean) > at > org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:215) > at > org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102) > at > org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:91) > at > org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:157) > - locked <0x00000006d7509a98> (a > org.apache.cxf.jaxws.JaxWsProxyFactoryBean) > at > org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:142) > - locked <0x00000006d7509a98> (a > org.apache.cxf.jaxws.JaxWsProxyFactoryBean) > at org.apache.cxf.jaxws.ServiceImpl.createPort(ServiceImpl.java:478) > at > org.jboss.wsf.stack.cxf.client.ProviderImpl$JBossWSServiceImpl.createPort(ProviderImpl.java:558) > at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:345) > at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:336) > at javax.xml.ws.Service.getPort(Service.java:99) > > ... > > > thanks, > > Venkat > -- Daniel Kulp [email protected] - http://dankulp.com/blog Talend Community Coder - http://coders.talend.com
