Мой bean-компонент DefaultMessageListernerFactory выглядит как
@Bean
public JmsListenerContainerFactory<?> jmsListenerContainerFactory(ConnectionFactory connectionFactory,
DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setSessionTransacted(false);
factory.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
factory.setErrorHandler(new DefaultJMSErrorHandler());
configurer.configure(factory, connectionFactory);
return factory;
}
При использовании @JmsListener и когда мое приложение выдает исключение - я ожидал, что мое сообщение НЕ будет возвращено обратно, но я заметил, что это так.Я думал, что sessionTransaction (false) не должен демонстрировать это поведение.
Я заметил, что мои журналы транзакций говорят это
2019-09-20 14:22:42.609 DEBUG 17252 --- [enerContainer-1] o.s.j.l.DefaultMessageListenerContainer : Initiating transaction rollback on application exception
Во время отладки я заметил, что DefaultMessageListner имеет sessionTransacted, чтобы быть истинным.Он также создает сеанс JMS с режимом (0) - SESSION_TRANSACTED
Я явно что-то упустил.
Может кто-нибудь сказать мне, что мне здесь не хватает?
К вашему сведению - я использую IBM MQ