2016-06-12 114 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

回答