[ 
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.

Reply via email to