Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.22.1, 2.23.0
-
None
-
Unknown
Description
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.