Defensively unwrap CacheConnectionFactory
This commit refines the optimization introduced in gh-39816 to only unwrap our own caching connection factory. The more advanced unwrap algorithm is still available, but opt-in only. Unwrapping more aggressively may break use cases where the wrapped ConnectionFactory is required, i.e. for transactional purposes. Closes gh-43277
This commit is contained in:
@@ -165,6 +165,8 @@ In most scenarios, message listener containers should be configured against the
|
||||
This way each listener container has its own connection and this gives full responsibility to it in terms of local recovery.
|
||||
The auto-configuration uses javadoc:org.springframework.boot.jms.ConnectionFactoryUnwrapper[] to unwrap the native connection factory from the auto-configured one.
|
||||
|
||||
NOTE: The auto-configuration only unwraps `CachedConnectionFactory`.
|
||||
|
||||
By default, the default factory is transactional.
|
||||
If you run in an infrastructure where a javadoc:org.springframework.transaction.jta.JtaTransactionManager[] is present, it is associated to the listener container by default.
|
||||
If not, the `sessionTransacted` flag is enabled.
|
||||
|
||||
@@ -31,7 +31,7 @@ public class MyJmsConfiguration {
|
||||
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory,
|
||||
DefaultJmsListenerContainerFactoryConfigurer configurer) {
|
||||
DefaultJmsListenerContainerFactory listenerFactory = new DefaultJmsListenerContainerFactory();
|
||||
configurer.configure(listenerFactory, ConnectionFactoryUnwrapper.unwrap(connectionFactory));
|
||||
configurer.configure(listenerFactory, ConnectionFactoryUnwrapper.unwrapCaching(connectionFactory));
|
||||
listenerFactory.setTransactionManager(null);
|
||||
listenerFactory.setSessionTransacted(false);
|
||||
return listenerFactory;
|
||||
|
||||
@@ -31,7 +31,7 @@ public class MyJmsConfiguration {
|
||||
public DefaultJmsListenerContainerFactory myFactory(DefaultJmsListenerContainerFactoryConfigurer configurer,
|
||||
ConnectionFactory connectionFactory) {
|
||||
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
|
||||
configurer.configure(factory, ConnectionFactoryUnwrapper.unwrap(connectionFactory));
|
||||
configurer.configure(factory, ConnectionFactoryUnwrapper.unwrapCaching(connectionFactory));
|
||||
factory.setMessageConverter(new MyMessageConverter());
|
||||
return factory;
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ class MyJmsConfiguration {
|
||||
fun jmsListenerContainerFactory(connectionFactory: ConnectionFactory?,
|
||||
configurer: DefaultJmsListenerContainerFactoryConfigurer): DefaultJmsListenerContainerFactory {
|
||||
val listenerFactory = DefaultJmsListenerContainerFactory()
|
||||
configurer.configure(listenerFactory, ConnectionFactoryUnwrapper.unwrap(connectionFactory))
|
||||
configurer.configure(listenerFactory, ConnectionFactoryUnwrapper.unwrapCaching(connectionFactory))
|
||||
listenerFactory.setTransactionManager(null)
|
||||
listenerFactory.setSessionTransacted(false)
|
||||
return listenerFactory
|
||||
|
||||
@@ -30,7 +30,7 @@ class MyJmsConfiguration {
|
||||
fun myFactory(configurer: DefaultJmsListenerContainerFactoryConfigurer,
|
||||
connectionFactory: ConnectionFactory): DefaultJmsListenerContainerFactory {
|
||||
val factory = DefaultJmsListenerContainerFactory()
|
||||
configurer.configure(factory, ConnectionFactoryUnwrapper.unwrap(connectionFactory))
|
||||
configurer.configure(factory, ConnectionFactoryUnwrapper.unwrapCaching(connectionFactory))
|
||||
factory.setMessageConverter(MyMessageConverter())
|
||||
return factory
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user