Hi,
I have a webservice internally calling a couple of other subordinate
webservices. I'm trying to upgrade it to an async non-blocking way using Camel.
So far it's route looks like this:
<camel:route>
<camel:from uri="direct:anAsyncNioService" />
<camel:bean ref="processor1" />
<camel:multicast stopOnException="true" parallelProcessing="true">
<camel:bean ref="processor21" />
<camel:bean ref="processor22" />
</camel:multicast>
<camel:bean ref="processor3" />
</camel:route>
But I'm stuck with a couple of unsolved issues:
1. Originaly service parts (which are now processor1, *21, *22 and *3) used a
request-scoped Spring bean holding context. Spring stores it in a ThreadLocal
object so it causes issues both when a new thread is involved in <multicast>
and when a callback is invoked in a randomly-associated thread on a responce
coming from a subordinate service called.
2. Original service uses slf4j (logback) for loggig and maintains an MDC
(http://logback.qos.ch/manual/mdc.html). The MDC is again inside
LogbackMDCAdapter stored in a ThreadLocal. Hence same issue as with
request-scoped beans.
I do understand that in Camel all request-scoped info should be stored inside
the Exchange. But as I pointed above it conflicts with lots of so convenient
third-party things as request-scoped Spring beans and MDC are. So I wonder how
do others solve it?
---
Best regards