camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stefan Burkard <sburk...@gmail.com>
Subject Re: Transacted CXF-Consumer from queue
Date Wed, 21 Mar 2012 16:26:42 GMT
Hi Willem

I suspected something like this - I am a Camel beginner and therefore
didn't know if this is a bug or a feature :-)

My case is to make the following routes transactional:
1. I am consuming messages with a CXF bean endpoint from an ActiveMQ
queue to get an unmarshalled Exchange (the producer sends - fire and
forget - SOAP messages with mtom attachments to the queue)
2. I am sending the Exchanges with ".to(direct:...)" to the main route
of my module
3. The main route processes the Exchanges

To check how these routes behave under error conditions, I am
injecting intentionally an exception into the direct-endpoint
(to"direct:...") of the first route. Therefore I am getting (as
expected) the exception and afterwards the queue is empty. This means
my route is not secured against message loss. If I understand you
correctly, the exception that occurs during route-processing is not
recoginsed by the CXF-consumer and therefore the consumer commits the
message consumption to the queue.

So, how can I make this asynchronous SOAP over JMS usecase
transactional so that the message remains in the queue if an error
occurs during route processing?

Thanks for your help
Stefan


On Wed, Mar 21, 2012 at 14:23, Willem Jiang <willem.jiang@gmail.com> wrote:
> If you are using inOnly MEP, camel-cxf producer will not know any thing
> about the exception.
> I'm not sure what kind of error that you get.
>
>
>
> On 3/21/12 5:54 PM, Burkard Stephan wrote:
>>
>> Hello
>>
>> I try to get running a SOAP over JMS usecase with the configuration
>> outlined here:
>> http://camel.apache.org/better-jms-transport-for-cxf-webservice-using-ap
>> ache-camel.html
>> <http://camel.apache.org/better-jms-transport-for-cxf-webservice-using-a
>> pache-camel.html>
>>
>> My webservice is InOnly, it does not respond to requests. The client
>> therefore sends SOAP messages to a queue without waiting for an answer.
>> On the server side camel consumes the messages.
>>
>> I tried to test transaction behaviour of my camel routes with unittests
>> where I advice the route with exceptions that occur at specific
>> entpoints. This works fine when I consume from the queue directly
>> (activemq:queue:...). If an error occurs the message is not commited and
>> it stays in the queue.
>> When I use a CXF endpoint to consume messages (cxf:bean:...), messages
>> are lost when an exception occurs. They seem to be commited in activemq
>> before or despite an error occurs.
>> Therefore I tried to read first from the queue directly, forward the
>> message to a direct endpoint and consume the messages with CXF from the
>> direct endpoint. But in this case the message is also lost if an error
>> occurs after consuming the message with CXF.
>>
>> Before posting routes and configuration details, I just would like to
>> know if this is "normal" behaviour of the CXF endpoint with inOnly MEP
>> or if the messages should stay in the queue as I expect?
>>
>> Perhaps this is the same problem as described in this thread:
>> http://camel.465427.n5.nabble.com/CXF-Camel-JMS-Endpoint-exception-handl
>> ing-td4471175.html
>> <http://camel.465427.n5.nabble.com/CXF-Camel-JMS-Endpoint-exception-hand
>> ling-td4471175.html>  ?
>>
>> Thanks for your help
>> Stefan
>>
>
>
> --
> Willem
> ----------------------------------
> FuseSource
> Web: http://www.fusesource.com
> Blog:    http://willemjiang.blogspot.com (English)
>         http://jnn.javaeye.com (Chinese)
> Twitter: willemjiang
> Weibo: willemjiang

Mime
View raw message