Skip to content

Commit 6ccc13f

Browse files
committed
Merge pull request #36767 from eddumelendez
* pr/36767: Polish "Configure ActiveMQConnectionFactory properly without spring-jms" Configure ActiveMQConnectionFactory properly without spring-jms Closes gh-36767
2 parents 5ed5820 + 5e11bac commit 6ccc13f

File tree

2 files changed

+39
-25
lines changed

2 files changed

+39
-25
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/artemis/ArtemisConnectionFactoryConfiguration.java

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -44,41 +44,40 @@
4444
class ArtemisConnectionFactoryConfiguration {
4545

4646
@Configuration(proxyBeanMethods = false)
47-
@ConditionalOnClass(CachingConnectionFactory.class)
4847
@ConditionalOnProperty(prefix = "spring.artemis.pool", name = "enabled", havingValue = "false",
4948
matchIfMissing = true)
5049
static class SimpleConnectionFactoryConfiguration {
5150

52-
private final ArtemisProperties properties;
53-
54-
private final ListableBeanFactory beanFactory;
51+
@Bean(name = "jmsConnectionFactory")
52+
@ConditionalOnProperty(prefix = "spring.jms.cache", name = "enabled", havingValue = "false")
53+
ActiveMQConnectionFactory jmsConnectionFactory(ArtemisProperties properties, ListableBeanFactory beanFactory) {
54+
return createJmsConnectionFactory(properties, beanFactory);
55+
}
5556

56-
SimpleConnectionFactoryConfiguration(ArtemisProperties properties, ListableBeanFactory beanFactory) {
57-
this.properties = properties;
58-
this.beanFactory = beanFactory;
57+
private static ActiveMQConnectionFactory createJmsConnectionFactory(ArtemisProperties properties,
58+
ListableBeanFactory beanFactory) {
59+
return new ArtemisConnectionFactoryFactory(beanFactory, properties)
60+
.createConnectionFactory(ActiveMQConnectionFactory.class);
5961
}
6062

61-
@Bean(name = "jmsConnectionFactory")
63+
@Configuration(proxyBeanMethods = false)
64+
@ConditionalOnClass(CachingConnectionFactory.class)
6265
@ConditionalOnProperty(prefix = "spring.jms.cache", name = "enabled", havingValue = "true",
6366
matchIfMissing = true)
64-
CachingConnectionFactory cachingJmsConnectionFactory(JmsProperties jmsProperties) {
65-
JmsProperties.Cache cacheProperties = jmsProperties.getCache();
66-
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(createConnectionFactory());
67-
connectionFactory.setCacheConsumers(cacheProperties.isConsumers());
68-
connectionFactory.setCacheProducers(cacheProperties.isProducers());
69-
connectionFactory.setSessionCacheSize(cacheProperties.getSessionCacheSize());
70-
return connectionFactory;
71-
}
72-
73-
@Bean(name = "jmsConnectionFactory")
74-
@ConditionalOnProperty(prefix = "spring.jms.cache", name = "enabled", havingValue = "false")
75-
ActiveMQConnectionFactory jmsConnectionFactory() {
76-
return createConnectionFactory();
77-
}
67+
static class CachingConnectionFactoryConfiguration {
68+
69+
@Bean(name = "jmsConnectionFactory")
70+
CachingConnectionFactory cachingJmsConnectionFactory(JmsProperties jmsProperties,
71+
ArtemisProperties properties, ListableBeanFactory beanFactory) {
72+
JmsProperties.Cache cacheProperties = jmsProperties.getCache();
73+
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(
74+
createJmsConnectionFactory(properties, beanFactory));
75+
connectionFactory.setCacheConsumers(cacheProperties.isConsumers());
76+
connectionFactory.setCacheProducers(cacheProperties.isProducers());
77+
connectionFactory.setSessionCacheSize(cacheProperties.getSessionCacheSize());
78+
return connectionFactory;
79+
}
7880

79-
private ActiveMQConnectionFactory createConnectionFactory() {
80-
return new ArtemisConnectionFactoryFactory(this.beanFactory, this.properties)
81-
.createConnectionFactory(ActiveMQConnectionFactory.class);
8281
}
8382

8483
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/artemis/ArtemisAutoConfigurationTests.java

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

4848
import org.springframework.boot.autoconfigure.AutoConfigurations;
4949
import org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration;
50+
import org.springframework.boot.test.context.FilteredClassLoader;
5051
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
5152
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
5253
import org.springframework.context.ApplicationContext;
@@ -357,6 +358,20 @@ void poolConnectionFactoryConfiguration() {
357358
});
358359
}
359360

361+
@Test
362+
void cachingConnectionFactoryNotOnTheClasspathThenSimpleConnectionFactoryAutoConfigured() {
363+
this.contextRunner.withClassLoader(new FilteredClassLoader(CachingConnectionFactory.class))
364+
.withPropertyValues("spring.artemis.pool.enabled=false", "spring.jms.cache.enabled=false")
365+
.run((context) -> assertThat(context).hasSingleBean(ActiveMQConnectionFactory.class));
366+
}
367+
368+
@Test
369+
void cachingConnectionFactoryNotOnTheClasspathAndCacheEnabledThenSimpleConnectionFactoryNotConfigured() {
370+
this.contextRunner.withClassLoader(new FilteredClassLoader(CachingConnectionFactory.class))
371+
.withPropertyValues("spring.artemis.pool.enabled=false", "spring.jms.cache.enabled=true")
372+
.run((context) -> assertThat(context).doesNotHaveBean(ActiveMQConnectionFactory.class));
373+
}
374+
360375
private ConnectionFactory getConnectionFactory(AssertableApplicationContext context) {
361376
assertThat(context).hasSingleBean(ConnectionFactory.class).hasBean("jmsConnectionFactory");
362377
ConnectionFactory connectionFactory = context.getBean(ConnectionFactory.class);

0 commit comments

Comments
 (0)