You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Freeman Fang (JIRA)" <ji...@apache.org> on 2011/06/01 08:37:48 UTC
[jira] [Commented] (CXF-3558) JaxWsProxyFactoryBean.create is not
thread-safe
[ https://issues.apache.org/jira/browse/CXF-3558?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13042002#comment-13042002 ]
Freeman Fang commented on CXF-3558:
-----------------------------------
Hi Tomasz,
Btw, your blog about "Enabling load balancing and failover in Apache CXF" is really good, I've added the link to cxf resources and articles list.
Thanks
Freeman
> JaxWsProxyFactoryBean.create is not thread-safe
> -----------------------------------------------
>
> Key: CXF-3558
> URL: https://issues.apache.org/jira/browse/CXF-3558
> Project: CXF
> Issue Type: Bug
> Components: JAX-WS Runtime
> Affects Versions: 2.4
> Reporter: Tomasz Nurkiewicz
> Assignee: Freeman Fang
> Fix For: 2.4.1, 2.3.5
>
> Attachments: CXF-3558.txt
>
>
> While running {{JaxWsProxyFactoryBean.create}} concurrently I encountered the following exception:
> {code}Caused by: java.util.ConcurrentModificationException
> at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:761)
> at java.util.LinkedList$ListItr.next(LinkedList.java:696)
> at org.apache.cxf.service.factory.AbstractServiceFactoryBean.sendEvent(AbstractServiceFactoryBean.java:71)
> at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:238)
> at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:202)
> at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:101)
> at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:90)
> at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:152)
> at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:142)
> {code}
> Although not documented (?), {{org.apache.cxf.service.factory.ReflectionServiceFactoryBean#create}} called somewhere during endpoint creation is {{synchronized}} which suggests whole {{create}} is thread-safe, but apparently it's not.
> I managed to discover source of this problem. I captured two threads: one ({{pool-1-thread-4}}) entered synchronized {{ReflectionServiceFactoryBean#create}}, the second one ({{pool-1-thread-2}}) didn't made there yet but instead it calls {{AbstractServiceFactoryBean.setBus}} outside of the {{synchronized}} block. This causes the {{org.apache.cxf.service.factory.AbstractServiceFactoryBean#listeners}} to be updated, making the former thread being susceptible to {{ConcurrentModificationException}}. Stack dumps attached.
> Please either fix concurrency issue (making {{listeners}} instance of {{java.util.concurrent.CopyOnWriteArrayList}} might not be enough though) or document that {{JaxWsProxyFactoryBean.create}} is not thread-safe.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira