[ https://issues.apache.org/activemq/browse/AMQ-731?page=comments#action_36242 ]
Christopher G. Stach II commented on AMQ-731: --------------------------------------------- It could be multiple transactions or multiple branches. For example, a single database connection can support X number of concurrent transactions as well as Y number of branches within each transaction. I assume that since Resin is the application server, the transaction manager, and the JCA container, it is calling end on the enlisted XAResources. Check out the stack trace above. JBoss TreeCache is calling suspend on the TM to do some work outside of the transaction (TreeCache.suspend() line: 101). We use Hibernate's connection after_statement release mode, which is appropriate for connections using JTA. > Redeliveries don't work with resource adapter and Jencks > -------------------------------------------------------- > > Key: AMQ-731 > URL: https://issues.apache.org/activemq/browse/AMQ-731 > Project: ActiveMQ > Type: Bug > Components: Connector > Versions: 4.0 > Environment: Sun JDK 1.5.0_06, Jencks 1.1.3, AMQ 4.0, Resin Pro 3.0.14 > Reporter: Christopher G. Stach II > > > During a rollback in a JTA transaction, this exception is generated a few > times: > org.apache.activemq.broker.AbstractConnection.serviceException Async > error occurred: javax.jms.JMSException: Could not correlate > acknowledgment with dispatched message: MessageAck {commandId = 137, > responseRequired = false, ackType = 1, consumerId = > ID:xxx-2276-1148335783189-2:5:-1:2, firstMessageId = > ID:xxx-2276-1148335783189-2:1:1:1:2, lastMessageId = > ID:xxx-2276-1148335783189-2:1:1:1:2, destination = queue://xxxQueue, > transactionId = null, messageCount = 1} > javax.jms.JMSException: Could not correlate acknowledgment with > dispatched message: MessageAck {commandId = 137, responseRequired = > false, ackType = 1, consumerId = ID:xxx-2276-1148335783189-2:5:-1:2, > firstMessageId = ID:xxx-2276-1148335783189-2:1:1:1:2, lastMessageId = > ID:xxx-2276-1148335783189-2:1:1:1:2, destination = queue://xxxQueue, > transactionId = null, messageCount = 1} > at > org.apache.activemq.broker.region.PrefetchSubscription.acknowledge(PrefetchSubscription.java:175) > at > org.apache.activemq.broker.region.AbstractRegion.acknowledge(AbstractRegion.java:233) > at > org.apache.activemq.broker.region.RegionBroker.acknowledge(RegionBroker.java:362) > at > org.apache.activemq.broker.TransactionBroker.acknowledge(TransactionBroker.java:176) > at > org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:65) > at > org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:65) > at > org.apache.activemq.broker.MutableBrokerFilter.acknowledge(MutableBrokerFilter.java:78) > at > org.apache.activemq.broker.AbstractConnection.processMessageAck(AbstractConnection.java:356) > at org.apache.activemq.command.MessageAck.visit(MessageAck.java:178) > at > org.apache.activemq.broker.AbstractConnection.service(AbstractConnection.java:201) > at > org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:62) > at > org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:97) > at > org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:63) > at > org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:76) > at > org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:44) > at > org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60) > at > org.apache.activemq.ActiveMQConnection.asyncSendPacket(ActiveMQConnection.java:1111) > at > org.apache.activemq.ActiveMQSession.asyncSendPacket(ActiveMQSession.java:1655) > at > org.apache.activemq.ActiveMQSession$2.afterRollback(ActiveMQSession.java:720) > at > org.apache.activemq.TransactionContext.afterRollback(TransactionContext.java:134) > at > org.apache.activemq.TransactionContext.rollback(TransactionContext.java:409) > at > org.apache.activemq.ra.LocalAndXATransaction.rollback(LocalAndXATransaction.java:126) > at > org.apache.geronimo.transaction.manager.WrapperNamedXAResource.rollback(WrapperNamedXAResource.java:78) > at > com.caucho.transaction.TransactionImpl.rollbackInt(TransactionImpl.java:787) > at > com.caucho.transaction.TransactionImpl.commit(TransactionImpl.java:560) > at org.jencks.XAEndpoint.afterDelivery(XAEndpoint.java:103) > at > org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.afterDelivery(MessageEndpointProxy.java:125) > at > org.apache.activemq.ra.MessageEndpointProxy.afterDelivery(MessageEndpointProxy.java:64) > at > org.apache.activemq.ra.ServerSessionImpl.afterDelivery(ServerSessionImpl.java:214) > at org.apache.activemq.ActiveMQSession.run(ActiveMQSession.java:751) > at > org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:163) > at com.caucho.jca.WorkThread.run(WorkThread.java:99) > at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:490) > at com.caucho.util.ThreadPool.run(ThreadPool.java:423) > at java.lang.Thread.run(Thread.java:595) > Note that the ackType is a poison ack. This shouldn't be the case as the > configuration (below) on the resource adapter and the managed connection > factory both specify 9 redeliveries. Redelivery does not happen. > Broker configuration: > <?xml version="1.0" encoding="UTF-8"?> > <beans xmlns="http://activemq.org/config/1.0"> > <broker persistent="false" useJmx="false"> > <transportConnectors> > <transportConnector uri="vm://localhost" /> > </transportConnectors> > <persistenceAdapter> > <memoryPersistenceAdapter /> > </persistenceAdapter> > </broker> > </beans> > Spring configuration: > <bean id="jms.connectionFactory" > class="org.springframework.jca.support.LocalConnectionFactoryBean"> > <property name="connectionManager"> > <bean > class="com.xxx.jca.ResinConnectionManagerFactoryBean"> > <property name="localTransaction"> > <value>false</value> > </property> > <property name="localTransactionOptimization"> > <value>false</value> > </property> > <property name="managedConnectionFactory"> > <ref > local="jms.managedConnectionFactory" /> > </property> > <property name="xaTransaction"> > <value>true</value> > </property> > </bean> > </property> > <property name="managedConnectionFactory"> > <ref local="jms.managedConnectionFactory" /> > </property> > </bean> > <bean id="jms.jcaContainer" class="org.jencks.JCAContainer"> > <property name="bootstrapContext"> > <bean > class="com.xxx.jca.ResinBootstrapContextFactoryBean" /> > </property> > <property name="resourceAdapter"> > <ref local="jms.resourceAdapter" /> > </property> > </bean> > <bean id="jms.managedConnectionFactory" > class="org.apache.activemq.ra.ActiveMQManagedConnectionFactory"> > <property name="allPrefetchValues"> > <value>1</value> > </property> > <property name="initialRedeliveryDelay"> > <value>2000</value> > </property> > <property name="maximumRedeliveries"> > <value>9</value> > </property> > <property name="redeliveryBackOffMultiplier"> > <value>2</value> > </property> > <property name="redeliveryUseExponentialBackOff"> > <value>true</value> > </property> > <property name="resourceAdapter"> > <ref local="jms.resourceAdapter" /> > </property> > </bean> > <bean id="jms.broker" > class="org.apache.activemq.xbean.BrokerFactoryBean"> > <property name="config"> > <value>classpath:activemq.xml</value> > </property> > <property name="start"> > <value>true</value> > </property> > </bean> > <bean id="jms.resourceAdapter" > class="org.apache.activemq.ra.ActiveMQResourceAdapter" > depends-on="jms.broker"> > <property name="allPrefetchValues"> > <value>1</value> > </property> > <property name="initialRedeliveryDelay"> > <value>2000</value> > </property> > <property name="maximumRedeliveries"> > <value>9</value> > </property> > <property name="redeliveryBackOffMultiplier"> > <value>2</value> > </property> > <property name="redeliveryUseExponentialBackOff"> > <value>true</value> > </property> > <property name="serverUrl"> > <value>vm://localhost</value> > </property> > </bean> > I have written a test case using Geronimo's TM, but it succeeds. The > configuration is very different, so I don't think it can be attributed to > just a simple change in TM. A lot of other configuration changes had to be > made. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/activemq/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
