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;
}
}
Schwer zu sagen, was auf den Code ohne einen Blick vor sich geht. –
ziemlich viele Standard-Beans für JMS und DB Interaktionscode erforderlich: - – Atul
Code mit der Frage hinzugefügt. – Atul