0

I have a spring boot application with spring JMS using DefaultMessageListener container. I am using Atomikos for transaction management. On exception the message queue roll back works fine and messages do move to back out queue, but the database updates do not roll back. I have set the autoconfigured JtaTransactionManager on DefaultMessageContainerBean. Are there any other configurations required here to get a true global transaction management. I am using My Batis for database.

public class CusListener implements MessageListener{
public void onMessage(Message message) {

    //Database call

    catch (Exception ex) {

                throw (new RuntimeException());
                }

}
}



@Configuration
public class ListenerContainer{

    @Bean
    public  DefaultMessageListenerContainer  defaultMessageListenerContainer(ConnectionFactory queueConnectionFactory,MQQueue queue, MessageListener listener,
            JtaTransactionManager jtaTransactionManager) {


        DefaultMessageListenerContainer defaultMessageListenerContainer =
                new DefaultMessageListenerContainer();
        defaultMessageListenerContainer.setConnectionFactory(queueConnectionFactory);               
        defaultMessageListenerContainer.setDestination(queue);
        defaultMessageListenerContainer.setMessageListener(listerner);
        defaultMessageListenerContainer.setTransactionManager(jtaTransactionManager);
        defaultMessageListenerContainer.setSessionTransacted(true);
        defaultMessageListenerContainer.setConcurrency("3-10");


        return defaultMessageListenerContainer; 
}

    //other beans declaration passed in the method above
}



@Configuration
public class PlanListenerSqlSessFac {


    @Bean(name="sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") NMCryptoDataSourceWrapper dataSource) throws Exception {

    }



    @Bean(name="driverManagerDataSource")
    public DriverManagerDataSource driverManagerDataSource() {
        DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();

        return driverManagerDataSource;
       }

}

Michael Petch
  • 46,082
  • 8
  • 107
  • 198
Atul
  • 151
  • 1
  • 2
  • 10

1 Answers1

0

You should use AtomikosDataSourceBean as dataDource.

See documentation : https://www.atomikos.com/bin/view/Documentation/ConfiguringJdbc