Hi Ron,
After digging the code , CXF's JMS transport[1]
conduit.handleResponse()[2] will block the thread when it waits for the
reply.
In camel-jms[3] which can be used as camel-transport for CXF[4], the
template takes care of the message receiving work and the main thread
uses future (JmsProducer.process()[5])to correlates the request and
response.
There is no much difference between the CXF's JMS transport and
camel-jms from the camel-cxf side, since the calling thread is blocked
when it waits for the response whether it uses future or not.
[1]http://cwiki.apache.org/CXF20DOC/jms-transport.html
[2]https://svn.apache.org/repos/asf/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java
[3]http://cwiki.apache.org/CAMEL/jms.html
[4]http://cwiki.apache.org/CAMEL/camel-transport-for-cxf.html
[5]https://svn.apache.org/repos/asf/activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java
Willem
rgavlin wrote:
Hi Willem,
Let me try to rephrase my question.
When camel-cxf sends its in-out jms request to an external service, does it
lock that thread while it waits for the reply? Or is the incoming request
thread released and another pool of threads used to monitor the temporary
replyTo queue and automatically correlate the request/response before
returning the message exchange to the caller? I believe the smx-cxf-bc async
provider does the latter which is my desired behavior. Does camel-cxf
provide similar functionality? If so, how would it be configured?
- Ron
willem.jiang wrote:
Hi Ron,
I went through the unit test in SM-1413, it only shows how to invoke the
service with ServiceMix client API.
Since camel-cxf component only interact with SMX by servicemix-camel
component, camel-cxf can't see any ServiceMix client invoke.
If you want to invoke the external web service by using jms transport in
camel-cxf , you just need to set the transport factory to jms.
There is a unit test[1] in camel to show how to use camel transport in
CXF , please check it out .
[1]
https://svn.apache.org/repos/asf/activemq/camel/trunk/tests/camel-itest/src/test/java/org/apache/camel/itest/customerrelations
The configuration files
[2]
https://svn.apache.org/repos/asf/activemq/camel/trunk/tests/camel-itest/src/test/resources/spring-config
Willem
rgavlin wrote:
I currently use a servicemix-cxf-bc "provider" to asynchronously send an
in-out mep to an external web service using the jms transport. See
https://issues.apache.org/activemq/browse/SM-1413 for a test that
demonstrates this capability.
I would also like to use the camel-cxf component in a similar fashion.
Does
camel-cxf provide an asynchronous processor to send an in-out mep to an
external web service using the jms transport? If so, how is this
configured?
Thanks,
- Ron