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. -- James ------- http://macstrac.blogspot.com/ Open Source Integration http://fusesource.com/