2016-06-12 13 views
0

Ich habe eine Spring-Boot-Anwendung mit Spring JMS mit DefaultMessageListener Container. Ich verwende Atomikos für das Transaktionsmanagement. In Ausnahmefällen funktioniert die Nachrichtenwarteschlangenzurücksetzung ordnungsgemäß und Nachrichten werden zur Zurückstellung der Warteschlange verschoben, die Datenbankaktualisierungen werden jedoch nicht zurückgesetzt. Ich habe den automatisch konfigurierten JtaTransactionManager auf DefaultMessageContainerBean gesetzt. Sind hier noch andere Konfigurationen nötig, um ein echtes globales Transaktionsmanagement zu erhalten? Ich verwende My Batis für die Datenbank.Atomikos Transaction Management Spring Boot/Federstaus

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

Schwer zu sagen, was auf den Code ohne einen Blick vor sich geht. –

+0

ziemlich viele Standard-Beans für JMS und DB Interaktionscode erforderlich: - – Atul

+0

Code mit der Frage hinzugefügt. – Atul

Antwort