[ 
https://issues.apache.org/activemq/browse/CAMEL-533?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Aaron Mulder resolved CAMEL-533.
--------------------------------

    Fix Version/s: 1.4.0
                       (was: 1.5.0)
       Resolution: Fixed

I tried this again in 1.4 and it seems to have been fixed.

Specifically, with the default "activemq" component, when the bean throws an 
exception I see a stack trace in the console (below) and the message is not 
redelivered.  If I use a custom ActiveMQ component with transactions enabled, I 
see the same stack trace and then the message is redelivered.

[aultMessageListenerContainer-7] EndpointMessageListener        WARN  
Endpoint[customJMS:topic:AnnotationTest] consumer caught an exception while 
processing JMS message: ActiveMQTextMessage {commandId = 5, responseRequired = 
false, messageId = 
ID:hagrid.chariotsolutions.com-50882-1219076163784-0:2:1:1:1, 
originalDestination = null, originalTransactionId = null, producerId = 
ID:hagrid.chariotsolutions.com-50882-1219076163784-0:2:1:1, destination = 
topic://AnnotationTest, transactionId = null, expiration = 0, timestamp = 
1219076164434, arrival = 0, brokerInTime = 1219076164434, brokerOutTime = 
1219076164434, correlationId = null, replyTo = null, persistent = false, type = 
null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, 
compressed = false, userID = null, content = null, marshalledProperties = 
[EMAIL PROTECTED], dataStructure = null, redeliveryCounter = 0, size = 0, 
properties = {console=Wii, game=Dance Dance Revolution}, readOnlyProperties = 
true, readOnlyBody = true, droppable = false, text = message text}
org.apache.camel.RuntimeCamelException: java.lang.IllegalStateException: This 
exception is just to see what happens.
        at 
org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:77)
        at 
org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:531)
        at 
org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:466)
        at 
org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:435)
        at 
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:316)
        at 
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:235)
        at 
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:887)
        at 
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:822)
        at java.lang.Thread.run(Thread.java:637)
Caused by: java.lang.IllegalStateException: This exception is just to see what 
happens.
        at training.spring.AnnotationTest.doSomething(AnnotationTest.java:20)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at 
org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:124)
        at 
org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:68)
        at 
org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:110)
        at 
org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:68)
        ... 8 more
[aultMessageListenerContainer-7] efaultMessageListenerContainer WARN  Execution 
of JMS message listener failed
org.apache.camel.RuntimeCamelException: java.lang.IllegalStateException: This 
exception is just to see what happens.
        at 
org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:77)
        at 
org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:531)
        at 
org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:466)
        at 
org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:435)
        at 
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:316)
        at 
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:235)
        at 
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:887)
        at 
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:822)
        at java.lang.Thread.run(Thread.java:637)
Caused by: java.lang.IllegalStateException: This exception is just to see what 
happens.
        at training.spring.AnnotationTest.doSomething(AnnotationTest.java:20)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at 
org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:124)
        at 
org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:68)
        at 
org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:110)
        at 
org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:68)
        ... 8 more



> ExceptionHandling & JMSReplyTo in @MessageDriven
> ------------------------------------------------
>
>                 Key: CAMEL-533
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-533
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 1.3.0
>            Reporter: Aaron Mulder
>             Fix For: 1.4.0
>
>
> I have an ActiveMQ Queue and a Spring Bean.  The bean is set to throw an 
> IllegalStateException on 1/3 of all invocations.  The message publisher sets 
> the JMSReplyTo destination, and there's a listener on the reply queue.
> If I configure a route in XML <from uri="activemq:queue:Test"/><to 
> uri="bean:MyBean:doSomething" /> then when the exception is thrown, the bean 
> is invoked a second time.  (I can tell as the JMS Message ID is annotated 
> into an argument to the doSomething method).  The reply queue gets exactly 
> one response for every request, regardless of the number of exceptions thrown 
> (I can tell as the JMSCorrelationID on the response is set to the incoming 
> JMSMessageID using an @OutHeaders annotated argument).
> If I drop the XML route and instead use 
> @MessageDriven(uri="activemq:queue:Test") then when the exception comes up, 
> the message silently disappears.  There is no error emitted by Camel, and the 
> reply queue just never gets a message for those requests where the bean threw 
> an exception.
> This is unexpected -- I would have thought the configured routing and 
> @MessageDriven routing had exactly the same behavior when the route was the 
> same.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to