Iacopo Rozzo created CXF-6782:
---------------------------------

             Summary: Modifications to JAX-WS client request context leak the 
thread scope
                 Key: CXF-6782
                 URL: https://issues.apache.org/jira/browse/CXF-6782
             Project: CXF
          Issue Type: Bug
          Components: Core
    Affects Versions: 3.0.7
         Environment: java version "1.7.0_80"
            Reporter: Iacopo Rozzo


As documented in 
[this|https://cxf.apache.org/faq.html#FAQ-AreJAX-WSclientproxiesthreadsafe?] 
page the request context can be made thread local (??Thus, anything set there 
will affect requests on other threads.??), but
I observed that even after having set the property 
_thread.local.request.context_ it arrives sometimes that some modifications to 
the request context leak the thread scope, leading potentially to unpredictable 
behaviors.

Digging in the code I found that the reason is the following.

The class _org.apache.cxf.endpoint.ClientImpl_ stores the request context 
entries in a map called _currentRequestContext_. After property 
_thread.local.request.context_ is set to true a call to _getRequestContext()_ 
triggers the creation of another map of type 
_org.apache.cxf.endpoint.ClientImpl.EchoContext_ which is associated to the 
current thread (the mapping is kept in the _requestContext_ map). This should 
guarantee the per thread isolation.
The _EchoContext_ is initialized with the entries of the shared map, and as its 
name suggests modifications are echoed back to the shared map. The problem is 
that when accessing the request context for the first time in a thread all the 
modifications done on other threads do affect the current thread even after 
"thread.local.request.context" is set to true, due to the initialization of the 
thread local map with shared one.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to