activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Christopher G. Stach II (JIRA)" <j...@apache.org>
Subject [jira] Created: (AMQ-731) Redeliveries don't work with resource adapter and Jencks
Date Tue, 30 May 2006 19:21:55 GMT
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


Mime
View raw message