[
https://issues.jboss.org/browse/JBWS-4088?page=com.atlassian.jira.plugin....
]
Alessio Soldano commented on JBWS-4088:
---------------------------------------
This is actually a known issue of Apache CXF, which is currently being dealt with. CXF
3.2.5 introduced a Client.getContexts() method that returns an autocloseable object that
allows getting req/res context and cleans them up in try-with blocks:
https://github.com/apache/cxf/commit/6abad1864187457984b0dff2622eafb4b5df... . The
context clear method also removes the current thread association with the current
context.
It should hence be a user responsibility to either explicitly call clear() on the response
context or get the context thought the afore mentioned Contexts mechanism, all before
returning the client to the pool.
Remove org.apache.cxf.staxutils.W3CDOMStreamWriter from context to
prevent memory leak in CXF
---------------------------------------------------------------------------------------------
Key: JBWS-4088
URL:
https://issues.jboss.org/browse/JBWS-4088
Project: JBoss Web Services
Issue Type: Enhancement
Reporter: david.boeren
Priority: Minor
Fix For: jbossws-cxf-5.2.2.Final
I think the explanation comes from the way the response context is kept within the
ClientImpl. The ClientImpl has the following:
protected Map<Thread, Map<String, Object>> responseContext =
Collections.synchronizedMap(new WeakHashMap<Thread, Map<String, Object>>());
and the getResponseContext() is implemented this way:
public Map<String, Object> getResponseContext() {
if (!responseContext.containsKey(Thread.currentThread())) {
responseContext.put(Thread.currentThread(), new HashMap<String,
Object>());
}
return responseContext.get(Thread.currentThread());
}
Now, in the customer case, I believe the threads that serve as keys to the weak hashmap
are never GCed (perhaps because they simply come from a thread pool that reuses them) and
I don't see the response context being explicitly cleaned up in cxf except when the
clientimpl is destroyed (which does not happen often in customer case as the clients are
pooled).
I would suggest to try explicitly cleaning up the response message context contents.
The customer has successfully done this using this on their client side:
dispatcher.getResponseContext().remove("org.apache.cxf.staxutils.W3CDOMStreamWriter");
Is it possible to have this fix added to JBossWS as an enhancement? Full details are on
the case link.
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)