Skip to content

Commit 1661da8

Browse files
committed
Polish "Configure ActiveMQConnectionFactory properly without spring-jms"
See gh-17531
1 parent 77b52b9 commit 1661da8

File tree

3 files changed

+27
-68
lines changed

3 files changed

+27
-68
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/activemq/ActiveMQConnectionFactoryConfiguration.java

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package org.springframework.boot.autoconfigure.jms.activemq;
1818

19-
import java.util.List;
2019
import java.util.stream.Collectors;
2120

2221
import javax.jms.ConnectionFactory;
@@ -48,12 +47,6 @@
4847
@ConditionalOnMissingBean(ConnectionFactory.class)
4948
class ActiveMQConnectionFactoryConfiguration {
5049

51-
private static ActiveMQConnectionFactory createConnectionFactory(ActiveMQProperties properties,
52-
List<ActiveMQConnectionFactoryCustomizer> connectionFactoryCustomizers) {
53-
return new ActiveMQConnectionFactoryFactory(properties, connectionFactoryCustomizers)
54-
.createConnectionFactory(ActiveMQConnectionFactory.class);
55-
}
56-
5750
@Configuration
5851
@ConditionalOnProperty(prefix = "spring.activemq.pool", name = "enabled", havingValue = "false",
5952
matchIfMissing = true)
@@ -62,9 +55,10 @@ static class SimpleConnectionFactoryConfiguration {
6255
@Bean
6356
@ConditionalOnProperty(prefix = "spring.jms.cache", name = "enabled", havingValue = "false")
6457
public ActiveMQConnectionFactory jmsConnectionFactory(ActiveMQProperties properties,
65-
ObjectProvider<ActiveMQConnectionFactoryCustomizer> connectionFactoryCustomizers) {
66-
return createConnectionFactory(properties,
67-
connectionFactoryCustomizers.orderedStream().collect(Collectors.toList()));
58+
ObjectProvider<ActiveMQConnectionFactoryCustomizer> factoryCustomizers) {
59+
return new ActiveMQConnectionFactoryFactory(properties,
60+
factoryCustomizers.orderedStream().collect(Collectors.toList()))
61+
.createConnectionFactory(ActiveMQConnectionFactory.class);
6862
}
6963

7064
@ConditionalOnClass(CachingConnectionFactory.class)
@@ -77,10 +71,12 @@ static class CachingConnectionFactoryConfiguration {
7771
matchIfMissing = true)
7872
public CachingConnectionFactory cachingJmsConnectionFactory(JmsProperties jmsProperties,
7973
ActiveMQProperties properties,
80-
ObjectProvider<ActiveMQConnectionFactoryCustomizer> connectionFactoryCustomizers) {
74+
ObjectProvider<ActiveMQConnectionFactoryCustomizer> factoryCustomizers) {
8175
JmsProperties.Cache cacheProperties = jmsProperties.getCache();
82-
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(createConnectionFactory(
83-
properties, connectionFactoryCustomizers.orderedStream().collect(Collectors.toList())));
76+
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(
77+
new ActiveMQConnectionFactoryFactory(properties,
78+
factoryCustomizers.orderedStream().collect(Collectors.toList()))
79+
.createConnectionFactory(ActiveMQConnectionFactory.class));
8480
connectionFactory.setCacheConsumers(cacheProperties.isConsumers());
8581
connectionFactory.setCacheProducers(cacheProperties.isProducers());
8682
connectionFactory.setSessionCacheSize(cacheProperties.getSessionCacheSize());
@@ -99,8 +95,9 @@ static class PooledConnectionFactoryConfiguration {
9995
@ConditionalOnProperty(prefix = "spring.activemq.pool", name = "enabled", havingValue = "true")
10096
public JmsPoolConnectionFactory pooledJmsConnectionFactory(ActiveMQProperties properties,
10197
ObjectProvider<ActiveMQConnectionFactoryCustomizer> factoryCustomizers) {
102-
ActiveMQConnectionFactory connectionFactory = createConnectionFactory(properties,
103-
factoryCustomizers.orderedStream().collect(Collectors.toList()));
98+
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactoryFactory(properties,
99+
factoryCustomizers.orderedStream().collect(Collectors.toList()))
100+
.createConnectionFactory(ActiveMQConnectionFactory.class);
104101
return new JmsPoolConnectionFactoryFactory(properties.getPool())
105102
.createPooledConnectionFactory(connectionFactory);
106103
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/activemq/ActiveMQAutoConfigurationTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import org.springframework.boot.autoconfigure.AutoConfigurations;
2626
import org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration;
27+
import org.springframework.boot.test.context.FilteredClassLoader;
2728
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
2829
import org.springframework.context.annotation.Bean;
2930
import org.springframework.context.annotation.Configuration;
@@ -202,6 +203,20 @@ public void poolConnectionFactoryConfiguration() {
202203
});
203204
}
204205

206+
@Test
207+
public void cachingConnectionFactoryNotOnTheClasspathThenSimpleConnectionFactoryAutoConfigured() {
208+
this.contextRunner.withClassLoader(new FilteredClassLoader(CachingConnectionFactory.class))
209+
.withPropertyValues("spring.activemq.pool.enabled=false", "spring.jms.cache.enabled=false")
210+
.run((context) -> assertThat(context).hasSingleBean(ActiveMQConnectionFactory.class));
211+
}
212+
213+
@Test
214+
public void cachingConnectionFactoryNotOnTheClasspathAndCacheEnabledThenSimpleConnectionFactoryNotConfigured() {
215+
this.contextRunner.withClassLoader(new FilteredClassLoader(CachingConnectionFactory.class))
216+
.withPropertyValues("spring.activemq.pool.enabled=false", "spring.jms.cache.enabled=true")
217+
.run((context) -> assertThat(context).doesNotHaveBean(ActiveMQConnectionFactory.class));
218+
}
219+
205220
@Configuration
206221
static class EmptyConfiguration {
207222

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/activemq/ActiveMQAutoConfigurationTestsWithoutCachingConnectionFactoryTests.java

Lines changed: 0 additions & 53 deletions
This file was deleted.

0 commit comments

Comments
 (0)