[ https://issues.apache.org/jira/browse/CXF-2954?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Kulp resolved CXF-2954. ------------------------------ Fix Version/s: 2.2.11 Resolution: Fixed > Occur ConcurrentModificationException when creating mutiple WebService client > in mutiple thread > ----------------------------------------------------------------------------------------------- > > Key: CXF-2954 > URL: https://issues.apache.org/jira/browse/CXF-2954 > Project: CXF > Issue Type: Bug > Components: Bus > Affects Versions: 2.2.10 > Environment: CXF2.2.10, JDK1.5, Tomcat 5.5 > Reporter: Jammy chen > Assignee: Daniel Kulp > Fix For: 2.2.11 > > > The cxf application will throw ConcurrentModificationException when creating > mutiple WebService client in mutiple thread in the same time. > Here is to create WebService client source code: > JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); > factory.setServiceClass(SystemPortType.class); > factory.setAddress(wsdlPort); > SystemPortType isspt = (SystemPortType) factory.create(); > ((BindingProvider) > isspt).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, > true); > Here is the ConcurrentModificationException stack track, notice only to > create mutiple WebService client in the same time will throw this exception: > Caused by: java.util.ConcurrentModificationException > at java.util.AbstractList$Itr.checkForComodification(Unknown Source) > at java.util.AbstractList$Itr.remove(Unknown Source) > at > org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAllByType(ExtensionManagerImpl.java:115) > at org.apache.cxf.bus.extension.DeferredMap.undefer(DeferredMap.java:36) > at > org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationFactoryForUri(DestinationFactoryManagerImpl.java:140) > at > org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpointInfo(AbstractWSDLBasedEndpointFactory.java:239) > at > org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:145) > at > org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:51) > at > org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:102) > at > org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:121) > I did some research and found this couses that different thread try to > operate the map in class ExtensionManagerImpl, the map was defined > by ConcurrentHashMap<String, ArrayList<Extension>> deferred, although > ConcurrentHashMap is Multithread-Safe but ArrayList is not, Here is a piece > of cxf code will trigger the exception, > public <T> void activateAllByType(Class<T> type) { > for (Map.Entry<String, Collection<Extension>> e : > deferred.entrySet()) { > Iterator<Extension> it = e.getValue().iterator(); > while (it.hasNext()) { > Extension ex = it.next(); > if (type.isAssignableFrom(ex.getClassObject(loader))) { > loadAndRegister(ex); > it.remove(); > } > } > } > } > why you didn't declare this method as synchronized? I found some else methods > both declare as synchronized such as activateAll(), activateViaNS(). so I > tried to did some changes which declare activateAllByType() as synchronized > everything work fine. > This maybe your bug I hope you fix it asap, This is very important for our > current project. really thank you -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.