This commit introduces spring.jms.listener.session-transacted property in order to enable explicit configuration of sessionTransacted on the DefaultMessageListenerContainer.

Prior to this commit, sessionTransacted would be configured implicitly based on presence of JtaTransactionManager.


The background for this change is that some JMS providers (SQS in my case) do not support transactions (see related code). With such a provider, the default behavior of auto-configuration to set sessionTransacted to true when JtaTransactionManager is not present results in a non-working setup that requires something along these lines:

@Bean
DefaultJmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory,
        DefaultJmsListenerContainerFactoryConfigurer configurer) {
    DefaultJmsListenerContainerFactory jmsListenerContainerFactory = new DefaultJmsListenerContainerFactory();
    configurer.configure(jmsListenerContainerFactory, connectionFactory);
    jmsListenerContainerFactory.setSessionTransacted(false);
    return jmsListenerContainerFactory;
}

Note that this PR does not change the existing logic - if spring.jms.listener.session-transacted is not set, sessionTransacted will still be set based on presence of JtaTransactionManager.