You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Christopher G. Stach II (JIRA)" <ji...@apache.org> on 2006/05/30 21:21:55 UTC

[jira] Created: (AMQ-731) Redeliveries don't work with resource adapter and Jencks

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


[jira] Commented: (AMQ-731) Redeliveries don't work with resource adapter and Jencks

Posted by "Christopher G. Stach II (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/AMQ-731?page=comments#action_36228 ] 

Christopher G. Stach II commented on AMQ-731:
---------------------------------------------

Okay, this is the stack trace with a breakpoint put at TransactionContext line 560.  It happens over and over and over, each time the transaction is suspended.

Thread [resin-30] (Suspended (breakpoint at line 560 in TransactionContext))	
	TransactionContext.setXid(Xid) line: 560	
	TransactionContext.end(Xid, int) line: 327	
	LocalAndXATransaction.end(Xid, int) line: 89	
	WrapperNamedXAResource.end(Xid, int) line: 51	
	TransactionImpl.suspend() line: 448	
	TransactionManagerImpl.suspend() line: 201	
	TreeCache.suspend() line: 101	
	TreeCache.put(Object, Object) line: 71	
	UpdateTimestampsCache.preinvalidate(Serializable[]) line: 54	
	ActionQueue.execute(Executable) line: 244	
	DefaultSaveOrUpdateEventListener(AbstractSaveEventListener).performSaveOrReplicate(Object, EntityKey, EntityPersister, boolean, Object, EventSource, boolean) line: 290	
	DefaultSaveOrUpdateEventListener(AbstractSaveEventListener).performSave(Object, Serializable, EntityPersister, boolean, Object, EventSource, boolean) line: 180	
	DefaultSaveOrUpdateEventListener(AbstractSaveEventListener).saveWithGeneratedId(Object, String, Object, EventSource, boolean) line: 108	
	DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(SaveOrUpdateEvent) line: 186	
	DefaultSaveOrUpdateEventListener.entityIsTransient(SaveOrUpdateEvent) line: 175	
	DefaultSaveOrUpdateEventListener.performSaveOrUpdate(SaveOrUpdateEvent) line: 98	
	DefaultSaveOrUpdateEventListener.onSaveOrUpdate(SaveOrUpdateEvent) line: 70	
	SessionImpl.fireSaveOrUpdate(SaveOrUpdateEvent) line: 509	
	SessionImpl.saveOrUpdate(String, Object) line: 501	
	SessionImpl.saveOrUpdate(Object) line: 497	
	HibernateTemplate$18.doInHibernate(Session) line: 693	
	HibernateTemplate.execute(HibernateCallback, boolean) line: 366	
	HibernateTemplate.saveOrUpdate(Object) line: 690	
	LeadDAOImpl(AbstractDAOImpl<E>).saveOrUpdate(E) line: 281	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
	Method.invoke(Object, Object...) line: 585	
	AopUtils.invokeJoinpointUsingReflection(Object, Method, Object[]) line: 287	
	ReflectiveMethodInvocation.invokeJoinpoint() line: 181	
	ReflectiveMethodInvocation.proceed() line: 148	
	TransactionInterceptor.invoke(MethodInvocation) line: 96	
	ReflectiveMethodInvocation.proceed() line: 170	
	JdkDynamicAopProxy.invoke(Object, Method, Object[]) line: 176	
	$Proxy46.saveOrUpdate(Object) line: not available	
	RefinanceLeadImpl(LeadImpl).save() line: 545	
	ProcessorImpl.processLead(DistributionContext, Lead) line: 126	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
	Method.invoke(Object, Object...) line: 585	
	AopUtils.invokeJoinpointUsingReflection(Object, Method, Object[]) line: 287	
	ReflectiveMethodInvocation.invokeJoinpoint() line: 181	
	ReflectiveMethodInvocation.proceed() line: 148	
	TransactionInterceptor.invoke(MethodInvocation) line: 96	
	ReflectiveMethodInvocation.proceed() line: 170	
	JdkDynamicAopProxy.invoke(Object, Method, Object[]) line: 176	
	$Proxy74.processLead(DistributionContext, Lead) line: not available	
	ProcessorFacadeImpl$1.run() line: 92	
	ProcessorFacadeImpl(DistributionContextWrapper).wrap(DistributionContextWrapper$DistributionContextRunnable) line: 124	
	ProcessorFacadeImpl.processLead(Lead) line: 89	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
	Method.invoke(Object, Object...) line: 585	
	AopUtils.invokeJoinpointUsingReflection(Object, Method, Object[]) line: 287	
	ReflectiveMethodInvocation.invokeJoinpoint() line: 181	
	ReflectiveMethodInvocation.proceed() line: 148	
	TransactionInterceptor.invoke(MethodInvocation) line: 96	
	ReflectiveMethodInvocation.proceed() line: 170	
	JdkDynamicAopProxy.invoke(Object, Method, Object[]) line: 176	
	$Proxy75.processLead(Lead) line: not available	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
	Method.invoke(Object, Object...) line: 585	
	AopUtils.invokeJoinpointUsingReflection(Object, Method, Object[]) line: 287	
	ReflectiveMethodInvocation.invokeJoinpoint() line: 181	
	ReflectiveMethodInvocation.proceed() line: 148	
	RemoteInvocationTraceInterceptor.invoke(MethodInvocation) line: 68	
	ReflectiveMethodInvocation.proceed() line: 170	
	JdkDynamicAopProxy.invoke(Object, Method, Object[]) line: 176	
	$Proxy0.processLead(Lead) line: not available	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
	Method.invoke(Object, Object...) line: 585	
	LingoInvocation(RemoteInvocation).invoke(Object) line: 179	
	DefaultRemoteInvocationExecutor.invoke(RemoteInvocation, Object) line: 33	
	JmsServiceExporterMessageListener(RemoteInvocationBasedExporter).invoke(RemoteInvocation, Object) line: 76	
	JmsServiceExporterMessageListener(RemoteInvocationBasedExporter).invokeAndCreateResult(RemoteInvocation, Object) line: 112	
	JmsServiceExporterMessageListener(JmsServiceExporterSupport).onMessage(Message) line: 85	
	XAEndpoint.onMessage(Message) line: 126	
	MessageEndpointProxy$MessageEndpointAlive.onMessage(MessageEndpointProxy, Message) line: 120	
	MessageEndpointProxy.onMessage(Message) line: 60	
	ActiveMQSession.run() line: 692	
	ServerSessionImpl.run() line: 163	
	WorkThread.run() line: 99	
	ThreadPool.runTasks() line: 490	
	ThreadPool.run() line: 423	
	Thread.run() line: 595	


> 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


[jira] Updated: (AMQ-731) Redeliveries don't work with resource adapter and Jencks

Posted by "Christopher G. Stach II (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/AMQ-731?page=all ]

Christopher G. Stach II updated AMQ-731:
----------------------------------------

    Attachment: amq-txcontext.patch

This simple patch fixes the whole problem.

> 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
>  Attachments: amq-txcontext.patch
>
>
> 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


[jira] Commented: (AMQ-731) Redeliveries don't work with resource adapter and Jencks

Posted by "Christopher G. Stach II (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/AMQ-731?page=comments#action_36229 ] 

Christopher G. Stach II commented on AMQ-731:
---------------------------------------------

So, with that being said, should endedXATransactionContexts actually be a Map of LinkedHashSets?

> 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


[jira] Commented: (AMQ-731) Redeliveries don't work with resource adapter and Jencks

Posted by "David Jencks (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/AMQ-731?page=comments#action_36239 ] 

David Jencks commented on AMQ-731:
----------------------------------

Resin's  tx implementation is wrong.  suspend is only supposed to remove the thread/tx association, not change what resources are enrolled in the tx.

> 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


[jira] Commented: (AMQ-731) Redeliveries don't work with resource adapter and Jencks

Posted by "Christopher G. Stach II (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/AMQ-731?page=comments#action_36227 ] 

Christopher G. Stach II commented on AMQ-731:
---------------------------------------------

Oh, I should add, that once the redeliveries are exhausted, it ends up getting a ConnectionClosedException and jumping down to TransactionContext line 414.

> 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


[jira] Commented: (AMQ-731) Redeliveries don't work with resource adapter and Jencks

Posted by "David Jencks (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/AMQ-731?page=comments#action_36241 ] 

David Jencks commented on AMQ-731:
----------------------------------

I assume you mean mutliple jta transactions rather than multiple branches of a single jta transaction.  In this case something else such as the connector framework is responsible for delisting the connection(s) from the first tx and enlisting them in the 2nd tx.  IIRC this is stated rather unclearly in the jta spec and slightly more clearly but in terms of c programming in the xa spec.

In geronimo we normally don't do this.  The only time you can change transactions with suspend/resume is going into an ejb RequiresNew method and in this case we just give you new connections.  There is an experimental way of delisting connections and reusing them in the new transaction, but AFAIK no one has ever used it.  What are the circumstances that lead Resin to suspend/resume?

> 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


[jira] Commented: (AMQ-731) Redeliveries don't work with resource adapter and Jencks

Posted by "Christopher G. Stach II (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/AMQ-731?page=comments#action_36240 ] 

Christopher G. Stach II commented on AMQ-731:
---------------------------------------------

How would a single connection be used for multiple transaction branches if end is never called with TMSUSPEND?

> 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


[jira] Commented: (AMQ-731) Redeliveries don't work with resource adapter and Jencks

Posted by "Christopher G. Stach II (JIRA)" <ji...@apache.org>.
    [ 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


[jira] Commented: (AMQ-731) Redeliveries don't work with resource adapter and Jencks

Posted by "Christopher G. Stach II (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/AMQ-731?page=comments#action_36237 ] 

Christopher G. Stach II commented on AMQ-731:
---------------------------------------------

Comparing Resin's and Geronmio's TransactionManagerImpl suspend methods, Geronimo's doesn't even suspend the transaction.  The test case I have could probably never work, and it's no wonder that none of the AMQ developers have come across this if testing is only done with Geronimo.

> 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


[jira] Commented: (AMQ-731) Redeliveries don't work with resource adapter and Jencks

Posted by "Christopher G. Stach II (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/AMQ-731?page=comments#action_36226 ] 

Christopher G. Stach II commented on AMQ-731:
---------------------------------------------

Okay, here's a bit more information.  While stepping through a rollback, I've found l.elementData in TransactionContext.rollback(Xid) to contain 24 entries for the _same_ TransactionContext.  The loop at line 407 iterates over all of these, calling afterRollback on each.  afterRollback calls Synchronization.afterRollback at ActiveMQSession line 706 where redelivery is evaluated.  Since max redeliveries is set at 9 and there are 24 entries, the redeliveries are exhausted before this loop completes.

So, the question is, why 24 entries?


> 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


[jira] Commented: (AMQ-731) Redeliveries don't work with resource adapter and Jencks

Posted by "Christopher G. Stach II (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/AMQ-731?page=comments#action_36238 ] 

Christopher G. Stach II commented on AMQ-731:
---------------------------------------------

Resin's TransactionImpl.suspend() method, which doesn't exist in Geronimo, calls XAResource.end(Xid, XAResource.TMSUSPEND),  WrapperNamedXAResource.end(Xid, int) line: 51 in the above stack trace.


> 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


[jira] Resolved: (AMQ-731) Redeliveries don't work with resource adapter and Jencks

Posted by "james strachan (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/AMQ-731?page=all ]
     
james strachan resolved AMQ-731:
--------------------------------

    Fix Version: 4.0.1
                 4.1
     Resolution: Fixed
      Assign To: james strachan

Patch applied with thanks!

> 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
>     Assignee: james strachan
>      Fix For: 4.1, 4.0.1
>  Attachments: amq-txcontext.patch
>
>
> 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