2009/2/4 James Strachan <james.strac...@gmail.com>: > 2009/2/4 benshort <b...@benshort.co.uk>: >> >> Hi, >> >> I have the following route... >> >> from("jms:rts_messages_email?concurrentConsumers=1") >> .process(new SendingProcessor()) >> >> .onException(Exception.class) >> .handled(true) >> .maximumRedeliveries(0) >> .process(new SendFailedProcessor()) >> .to("jms:message_status", "jms:failed_messages") >> .end() >> >> .to("jms:message_status", smtp) >> .process(new SentProcessor()) >> .to("jms:message_status"); >> >> Errors while sending the smtp will be caught and sent to jms:message_status >> and jms:failed_messages. >> >> jms:message_status is used to log out the send attempts. jms:failed_messages >> is a queue of failed messages that are processed to decide if they should be >> retried or not. >> >> Now what I would like to do is make the shown route transactional. So the >> message is not removed from jms:rts_messages_email until it has been added >> to jms:message_status and jms:failed_messages in the case of an error or >> jms:message_status in the case of no error. >> >> I want to do this so that if the application dies while the message is >> trying to be sent it will still be in the jms:rts_messages_email jms queue. >> and next time the application is started it will be pulled out and retried. >> >> Is this possible? > > Yes - see the "Enabling Transacted Consumption" section here... > http://camel.apache.org/jms.html > > Basically specify transacted=true and provide a transactionManager on > the component.
Damn hit send to early - examples here btw http://camel.apache.org/transactional-client.html -- James ------- http://macstrac.blogspot.com/ Open Source Integration http://fusesource.com/