I'm sure you did it already, but did you post this on the AMQ ml? Francesco
Jim_Stringer wrote: > > I've been trying to figure this out for the last few day and I've run out > of ideas. I am testing a message driven been ActiveMQ 4.1 using Jencks 2.0 > and Spring 2.0.3. Things work fine when no runtime exception is thrown in > my message listener. When I do through one ActiveMQ reconnects to the > broker and neither the rolled back message nor any other message makes it > to my listener until I restart the application. > > This is my Spring file for the listener. > > <?xml version="1.0" encoding="UTF-8"?> > > <!-- START SNIPPET: spring --> > <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" > "http://www.springframework.org/dtd/spring-beans.dtd"> > <beans> > <!-- > || The TransactionManager > --> > <bean id="transactionManager" > class="org.jencks.factory.TransactionManagerFactoryBean"/> > > <!-- START SNIPPET: jca --> > <bean id="jencks" class="org.jencks.JCAContainer"> > <property name="transactionManager" ref="transactionManager"/> > <property name="threadPoolSize" value="25"/> > > <!-- the JCA Resource Adapter --> > <property name="resourceAdapter"> > <bean id="activeMQResourceAdapter" > class="org.apache.activemq.ra.ActiveMQResourceAdapter"> > <property name="serverUrl" value="tcp://localhost:61616"/> > </bean> > </property> > </bean> > <!-- END SNIPPET: jca --> > > <bean id="echoBean" class="my.sandbox.jms.EchoBean"/> > > <!-- END SNIPPET: inbound --> > > <!-- > || an inbound message connector using a stateful, pooled > MessageListener > --> > <bean id="requestResponseMEP" class="org.jencks.JCAConnector"> > > <property name="jcaContainer" ref="jencks" /> > > <!-- subscription details --> > <property name="activationSpec"> > <bean class="org.apache.activemq.ra.ActiveMQActivationSpec"> > <property name="destination" > value="test.spring.inboundConnectorB"/> > <property name="destinationType" value="javax.jms.Queue"/> > </bean> > </property> > > <!-- use XA transactions --> > <property name="transactionManager" ref="transactionManager"/> > > <property name="ref" value="echoBean"/> > </bean> > > </beans> > > <!-- END SNIPPET: spring --> > > The EchoBean is very simple. > > package my.sandbox.jms; > > import javax.jms.JMSException; > import javax.jms.Message; > import javax.jms.MessageListener; > import javax.jms.TextMessage; > > import org.apache.commons.logging.Log; > import org.apache.commons.logging.LogFactory; > > public class EchoBean implements MessageListener > { > private final Log logger = LogFactory.getLog(getClass()); > > public void onMessage(Message message) > { > try { > logger.info("onMessage: " + > ((TextMessage)message).getText()); > throw new RuntimeException("Boom!...Please roll me > back"); > } catch (JMSException e) { > logger.error(e); > } > } > > } > > Stepping through the code it appears that the exception makes it all the > way back to ActiveMQSession and hits this snippet... > > try { > messageListener.onMessage(message); > } catch ( Throwable e ) { > // TODO: figure out proper way to handle error. > log.error("error dispatching message: ",e); > connection.onAsyncException(e); > } > > > That TODO ends up closing the current connections to the broker and while > it does reconnect the messages never get to the listener. They get as far > as the ActiveMQSession but a flag appears to not let them be processed. I > have gotten the rollback to work using Springs > DefaultMessageListenerContainer but I'm not a big fan of it for an > enterprise solution. > > I know something very obvious is staring me right in the face, but after 3 > days I'm hoping somebody will tell me what it is. I'd appreciate any help. > -- View this message in context: http://www.nabble.com/Problems-with-Rollbacks-tf3404998.html#a10011191 Sent from the jencks - user mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe from this list please visit: http://xircles.codehaus.org/manage_email
