[
https://issues.apache.org/jira/browse/CXF-6629?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chester Kim updated CXF-6629:
-----------------------------
Description:
Occasionally, concurrentmodification exception happens in AbstractResourceInfo.
Following's a peek of stack trace
{code}
java.util.ConcurrentModificationException at
java.util.WeakHashMap$HashIterator.nextEntry(WeakHashMap.java:806) at
java.util.WeakHashMap$ValueIterator.next(WeakHashMap.java:833) at
org.apache.cxf.jaxrs.model.AbstractResourceInfo.clearProxies(AbstractResourceInfo.java:355)
at
org.apache.cxf.jaxrs.model.AbstractResourceInfo.clearThreadLocalProxies(AbstractResourceInfo.java:346)
at
org.apache.cxf.jaxrs.provider.ProviderFactory.clearProxies(ProviderFactory.java:745)
at
org.apache.cxf.jaxrs.provider.ProviderFactory.clearThreadLocalProxies(ProviderFactory.java:738)
at org.apache.cxf.jaxrs.client.WebClient.handleResponse(WebClient.java:1195)
at org.apache.cxf.jaxrs.client.WebClient.doResponse(WebClient.java:1156) at
org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1092)
at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:894) at
org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:865) at
org.apache.cxf.jaxrs.client.WebClient.invoke(WebClient.java:428) at
org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.method(WebClient.java:1621)
at
org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.method(WebClient.java:1616)
at
org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.get(WebClient.java:1536)
at
org.apache.cxf.jaxrs.client.spec.InvocationBuilderImpl.get(InvocationBuilderImpl.java:80)
at
...
{code}
The code is as following
{code}
private <T> void clearProxies(Map<Class<?>, Map<T, ThreadLocalProxy<?>>>
tlps) {
Map<T, ThreadLocalProxy<?>> proxies = tlps == null ? null :
tlps.get(getServiceClass());
if (proxies == null) {
return;
}
for (ThreadLocalProxy<?> tlp : proxies.values()) {
if (tlp != null) {
tlp.remove();
}
}
}
{code}
I don't think it's good idea to remove threadlocal value while iterating the
list.
was:
Occasionally, concurrentmodification exception happens in AbstractResourceInfo.
Following's a peek of stack trace
{code}
java.util.ConcurrentModificationException at
java.util.WeakHashMap$HashIterator.nextEntry(WeakHashMap.java:806) at
java.util.WeakHashMap$ValueIterator.next(WeakHashMap.java:833) at
org.apache.cxf.jaxrs.model.AbstractResourceInfo.clearProxies(AbstractResourceInfo.java:355)
at
org.apache.cxf.jaxrs.model.AbstractResourceInfo.clearThreadLocalProxies(AbstractResourceInfo.java:346)
at
org.apache.cxf.jaxrs.provider.ProviderFactory.clearProxies(ProviderFactory.java:745)
at
org.apache.cxf.jaxrs.provider.ProviderFactory.clearThreadLocalProxies(ProviderFactory.java:738)
at org.apache.cxf.jaxrs.client.WebClient.handleResponse(WebClient.java:1195)
at org.apache.cxf.jaxrs.client.WebClient.doResponse(WebClient.java:1156) at
org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1092)
at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:894) at
org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:865) at
org.apache.cxf.jaxrs.client.WebClient.invoke(WebClient.java:428) at
org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.method(WebClient.java:1621)
at
org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.method(WebClient.java:1616)
at
org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.get(WebClient.java:1536)
at
org.apache.cxf.jaxrs.client.spec.InvocationBuilderImpl.get(InvocationBuilderImpl.java:80)
at
...
{code}
> ConcurrentModificationException at AbstractResourceInfo.clearProxies()
> ----------------------------------------------------------------------
>
> Key: CXF-6629
> URL: https://issues.apache.org/jira/browse/CXF-6629
> Project: CXF
> Issue Type: Bug
> Components: JAX-RS
> Affects Versions: 3.1.2
> Environment: Redhat Enterprise Linux
> Reporter: Chester Kim
> Labels: cxf-rt-frontend-jaxrs
>
> Occasionally, concurrentmodification exception happens in
> AbstractResourceInfo. Following's a peek of stack trace
> {code}
> java.util.ConcurrentModificationException at
> java.util.WeakHashMap$HashIterator.nextEntry(WeakHashMap.java:806) at
> java.util.WeakHashMap$ValueIterator.next(WeakHashMap.java:833) at
> org.apache.cxf.jaxrs.model.AbstractResourceInfo.clearProxies(AbstractResourceInfo.java:355)
> at
> org.apache.cxf.jaxrs.model.AbstractResourceInfo.clearThreadLocalProxies(AbstractResourceInfo.java:346)
> at
> org.apache.cxf.jaxrs.provider.ProviderFactory.clearProxies(ProviderFactory.java:745)
> at
> org.apache.cxf.jaxrs.provider.ProviderFactory.clearThreadLocalProxies(ProviderFactory.java:738)
> at org.apache.cxf.jaxrs.client.WebClient.handleResponse(WebClient.java:1195)
> at org.apache.cxf.jaxrs.client.WebClient.doResponse(WebClient.java:1156) at
> org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1092)
> at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:894) at
> org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:865) at
> org.apache.cxf.jaxrs.client.WebClient.invoke(WebClient.java:428) at
> org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.method(WebClient.java:1621)
> at
> org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.method(WebClient.java:1616)
> at
> org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.get(WebClient.java:1536)
> at
> org.apache.cxf.jaxrs.client.spec.InvocationBuilderImpl.get(InvocationBuilderImpl.java:80)
> at
> ...
> {code}
> The code is as following
> {code}
> private <T> void clearProxies(Map<Class<?>, Map<T, ThreadLocalProxy<?>>>
> tlps) {
> Map<T, ThreadLocalProxy<?>> proxies = tlps == null ? null :
> tlps.get(getServiceClass());
> if (proxies == null) {
> return;
> }
> for (ThreadLocalProxy<?> tlp : proxies.values()) {
> if (tlp != null) {
> tlp.remove();
> }
> }
> }
> {code}
> I don't think it's good idea to remove threadlocal value while iterating the
> list.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)