2016-06-12 113 views
0

我有一個使用DefaultMessageListener容器的彈簧JMS彈簧引導應用程序。我正在使用Atomikos進行事務管理。 在例外情況下,消息隊列回滾工作正常,消息確實移出隊列,但數據庫更新不回滾。我在DefaultMessageContainerBean上設置了自動配置的JtaTransactionManager。是否有任何其他配置需要在這裏獲得真正的全球交易管理。我正在使用我的Batis數據庫。Atomikos交易管理彈簧引導/彈簧卡紙

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; 
     } 

}

+1

很難說沒有看代碼就是怎麼回事。 –

+0

下面的JMS anb數據庫交互代碼需要相當多的標準bean: - – Atul

+0

添加了帶有問題的代碼。 – Atul

回答