So markRollbackOnly() will not throw an exception, but you're already in an exception block. So you should mark the exception as handled == true.
On Fri, Aug 16, 2013 at 7:39 AM, nezor <[email protected]>wrote: > I'm attempting to send a message from an AMQ Virtual Topic consumer to an > http endpoint using http4 with transactions. When the http service is down > http4 returns a org.apache.http.conn.HttpHostConnectException. When this > exception is thrown I would like the transaction to be rolled back and the > failed message to be placed back in the queue. AMQ then has a redelivery > policy for these messages. All other exceptions are marked has handled and > placed in a DLQ. > > The route looks like this, > <route id="service.requests.consumer" streamCache="true"> > <from > uri="activemq:Consumer.service-requests.VirtualTopic.service.requests"/> > <convertBodyTo type="String" /> > <setHeader headerName="CamelHttpMethod"> > <constant>POST</constant> > </setHeader> > <transacted ref="PROPAGATION_REQUIRES_NEW"/> > <to uri="http4:{{service.requests.httpproduceruri}}"/> > <onException> > > <exception>org.apache.http.conn.HttpHostConnectException</exception> > <rollback markRollbackOnly="true"/> > </onException> > <onException> > <exception>java.lang.Exception</exception> > <handled> > <constant>true</constant> > </handled> > <transform> > <simple>{Exception:${exception}, > Request:${body}}</simple> > </transform> > <to uri="activemq:queue:service-requests.dlq"/> > </onException> > </route> > > The DQL piece of the route works perfectly. But I'm not seeing what I would > expect from the rollback. My expectation was that by using <rollback > markRollbackOnly="true"/> I should see no exception when I do the rollback. > However this is not the case, when I look at the log I see a > RollbackExchangeException and I don't know why. > > org.apache.camel.RuntimeCamelException: > org.apache.camel.RollbackExchangeException: Intended rollback. > Exchange[Message: ] > at > > org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1157)[88:org.apache.camel.camel-core:2.8.0.fuse-07-15] > at > > org.apache.camel.component.jms.EndpointMessageListener$EndpointMessageListenerAsyncCallback.done(EndpointMessageListener.java:174)[93:org.apache.camel.camel-jms:2.8.0.fuse-07-15] > at > > org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:110)[93:org.apache.camel.camel-jms:2.8.0.fuse-07-15] > at > > org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:560)[94:org.springframework.jms:3.0.5.RELEASE] > at > > org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:498)[94:org.springframework.jms:3.0.5.RELEASE] > at > > org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:467)[94:org.springframework.jms:3.0.5.RELEASE] > at > > org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:325)[94:org.springframework.jms:3.0.5.RELEASE] > at > > org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:243)[94:org.springframework.jms:3.0.5.RELEASE] > at > > org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058)[94:org.springframework.jms:3.0.5.RELEASE] > at > > org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050)[94:org.springframework.jms:3.0.5.RELEASE] > at > > org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)[94:org.springframework.jms:3.0.5.RELEASE] > at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown > Source)[:1.7.0_07] > at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown > Source)[:1.7.0_07] > at java.lang.Thread.run(Unknown Source)[:1.7.0_07] > > Is there something I'm missing between the AMQ transaction and the camel > route? Any help would be greatly appreciated, thank you. > > > > -- > View this message in context: > http://camel.465427.n5.nabble.com/Odd-AMQ-Transaction-Behavior-tp5737418.html > Sent from the Camel - Users mailing list archive at Nabble.com. > -- *Christian Posta* http://www.christianposta.com/blog twitter: @christianposta
