Atomikos Forum

Message is consumed despite tx rollback

I have a simple XA test setup, using JMS and JDBC. I use ActiveMQ and DB2, both with their proper XA drivers.

Sending messaged works ok, it is transactional. But the consume case does not - despite throwing an exception, the JMS message is consumed.

The strange thing is that it seems to be timing related - usually the first time the transaction is rolled back, and the message is still there - but one of the subsequent attempts to consume the message from the queue is successful.


This is my spring configuration for consuming messages:



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jms="http://www.springframework.org/schema/jms"
    xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd">

    <bean id="xaConnectionFactory" class="org.apache.activemq.ActiveMQXAConnectionFactory">
        <constructor-arg value="mulejms" />
        <constructor-arg value="mulejms" />
        <constructor-arg value="tcp://localhost:61616" />
    </bean>

    <bean id="atomikosConnectionFactoryBean" class="com.atomikos.jms.AtomikosConnectionFactoryBean"
        init-method="init" destroy-method="close">
        <property name="uniqueResourceName" value="amq1" />
        <property name="xaConnectionFactory" ref="xaConnectionFactory" />
    </bean>


    <bean id="msgHandler" class="com.findonnet.messaging.MessageHandlerImpl">
        <property name="sequenceDAO" ref="sequenceDAO" />
    </bean>

    <!-- End Messaging related beans -->


    <bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean"
        init-method="init" destroy-method="close">
        <property name="uniqueResourceName" value="DB2" />
        <property name="xaDataSource" ref="db2DataSource" />
    </bean>


    <bean id="db2DataSource" class="com.ibm.db2.jcc.DB2XADataSource">
        <property name="serverName" value="localhost" />
        <property name="portNumber" value="50000" />
        <property name="databaseName" value="HWEXT" />
        <property name="driverType" value="4" />
        <property name="user" value="hwextdev" />
        <property name="password" value="hwextdev" />
    </bean>



    <!-- ===================================================== -->
    <!-- ==== TRANSACTION MANAGER CONFIG ===================== -->
    <!-- ===================================================== -->


    <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
        init-method="init" destroy-method="close">
        <property name="forceShutdown" value="true" />
    </bean>

    <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" />

    <bean id="transactionManager"
        class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="transactionManager" ref="atomikosTransactionManager" />
        <property name="userTransaction" ref="atomikosUserTransaction" />
    </bean>

    <!-- enable transaction annotations, and use the correct transaction manager! -->
    <tx:annotation-driven transaction-manager="transactionManager" />

    <bean id="sequenceDAO" class="com.findonnet.persistence.MessageSequenceDAO">
        <property name="dataSource" ref="dataSource" />
    </bean>



    <!-- ========================================= -->
    <!-- ==== JMS CONFIG FOR SPRING=============== -->
    <!-- ========================================= -->


    <jms:annotation-driven container-factory="listenerContainer" />


    <jms:listener-container connection-factory="atomikosConnectionFactoryBean"
        transaction-manager="transactionManager" concurrency="1"
        factory-id="listenerContainer" />


</beans>
Michael Böckling Send private email
Monday, August 24, 2015
 
 
Hard to say just like that... If you have a budget for support then we can have somebody look at the minute details of your case and fix the problem.

Thanks
Guy Pardon Send private email
Sunday, September 13, 2015
 
 

This topic is archived. No further replies will be accepted.

Other recent topics Other recent topics