You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "cheng chen (JIRA)" <ji...@apache.org> on 2010/08/22 18:42:17 UTC
[jira] Updated: (CXF-2954) Occur ConcurrentModificationException
when creating mutiple WebService client in mutiple thread
[ https://issues.apache.org/jira/browse/CXF-2954?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
cheng chen updated CXF-2954:
----------------------------
Summary: Occur ConcurrentModificationException when creating mutiple WebService client in mutiple thread (was: Occur ConcurrentModificationException when creating mutiple WebService client in )
> 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: Aegis Databinding
> Affects Versions: 2.2.10
> Environment: CXF2.2.10, JDK1.5, Tomcat 5.5
> Reporter: cheng chen
>
> 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, Here is the the 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.