Paul D Johe created CAMEL-12968:
-----------------------------------

             Summary: DefaultFluentProducerTemplate is not thread safe 
(endpoint, etc.)
                 Key: CAMEL-12968
                 URL: https://issues.apache.org/jira/browse/CAMEL-12968
             Project: Camel
          Issue Type: Bug
          Components: camel-core
            Reporter: Paul D Johe


The DefaultFluentProducerTemplate saves state between method calls. This leads 
to unexpected behavior when the javadoc specifies that it should be thread safe.

For example:
 # thread 1 calls fluentProducerTemplate.to("direct:a").send("message1");
 # thread 2 calls fluentProducerTemplate.to("direct:b").send("message2");

If these are run in parallel, the sequence of calls can be:
 # thread 1 calls to("direct:a") - endpoint in the object is direct:a
 # thread 2 calls to("direct:b") - endpoint in the object is direct:b
 # *thread 1 calls send("message1") - this gets sent incorrectly to direct:b*
 # thread 2 calls send("message2") - this gets sent correctly to direct:b

Endpoint is one example, but almost all fields in this class share this 
behavior. It should be clearly documented which fields can be used fluently 
over multiple threads, and which cannot. As the API is today, all methods 
returning 'this' should be made thread-safe (state is only local to the caller) 
so that the fluent interface works as expected.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to