Lethal ThreadLocal in SoapExternalService
-----------------------------------------

                 Key: ODE-382
                 URL: https://issues.apache.org/jira/browse/ODE-382
             Project: ODE
          Issue Type: Bug
          Components: Axis2 Integration
    Affects Versions: 1.2, 1.1.1, 1.1, 1.0-incubating
            Reporter: Alexis Midon
            Assignee: Alexis Midon
            Priority: Blocker
             Fix For: 1.3


## Context:
An ExternalService is the internal representation of a third-party service. As 
such ODE invokes this third-party service through the ExternalService 
implementation. The implementation hides all the plumbing to actually invoke 
the third-party service.
An ExternalService may be invoked concurrently by several threads. These 
threads are pooled by an ExecutorService.

## The bug:
The SoapExternalService (SEP) implementation uses a ThreadLocal to avoid using 
axis2 ServiceClient concurrently.
But this is flawed because the ServiceClient depends on the SoapExternalService 
for configuration. Basically the "*.axis2" file that could be dropped in the 
deployment unit directory.

Let's say SEP#1 is invoked first and the invocatin is processed by thread#1, 
the ThreadLocal gets initialized with a ServiceClient instance 
-ServiceClient#1- using SEP#1.axis2 file. So now thread#1 is bound to SEP#1.
Then SEP#2 is invoked and thread#1 is retrieved from the thread pool to process 
this invocation. ServiceClient#1 is accessed through the ThreadLocal.
As a result SEP#2 is invoked with ServiceClient#1 => BUG

Same thing for axis Options ThreadLocal.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to