From 630c1456457f0a108cb243b7e92532e204f9b88e Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Wed, 5 Nov 2014 13:01:12 +0100 Subject: [PATCH] Fix order of JMS auto configuration Add additional @AutoConfigureAfter elements to ActiveMQAutoConfiguration and HornetQAutoConfiguration to ensure that they are configured after JndiConnectionFactoryAutoConfiguration. The possible sources for a JMS ConnectionFactory are: 1. JNDI 2. HornetQ (embedded broker or an external broker) 3. ActiveMQ (embedded broker or an external broker) The last two auto configurations must run after JTA auto-configuration has completed as it may register additional beans that are necessary to enable XA. Previously, the HornetQ embedded broker would start regardless of the presence of a ConnectionFactory as a ConditionalOnMissingBean was missing. Furthermore, there was no order condition for the JNDI auto-configuration so it may just run after one of the broker has been found. JNDI takes now precedence to be consistent with the regular DataSource auto configuration. Fixes gh-1821 --- .../jms/activemq/ActiveMQAutoConfiguration.java | 4 +++- .../jms/hornetq/HornetQAutoConfiguration.java | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/activemq/ActiveMQAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/activemq/ActiveMQAutoConfiguration.java index 070f689f67..a71d89cde7 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/activemq/ActiveMQAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/activemq/ActiveMQAutoConfiguration.java @@ -25,6 +25,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration; +import org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration; import org.springframework.boot.autoconfigure.jta.JtaAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; @@ -41,7 +42,8 @@ import org.springframework.context.annotation.Import; */ @Configuration @AutoConfigureBefore(JmsAutoConfiguration.class) -@AutoConfigureAfter(JtaAutoConfiguration.class) +@AutoConfigureAfter({ JtaAutoConfiguration.class, + JndiConnectionFactoryAutoConfiguration.class }) @ConditionalOnClass({ ConnectionFactory.class, ActiveMQConnectionFactory.class }) @ConditionalOnMissingBean(ConnectionFactory.class) @EnableConfigurationProperties(ActiveMQProperties.class) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQAutoConfiguration.java index 8e86dea97a..5e50d04883 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQAutoConfiguration.java @@ -19,10 +19,14 @@ package org.springframework.boot.autoconfigure.jms.hornetq; import javax.jms.ConnectionFactory; import org.hornetq.api.jms.HornetQJMSClient; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration; +import org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration; +import org.springframework.boot.autoconfigure.jta.JtaAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @@ -40,7 +44,10 @@ import org.springframework.context.annotation.Import; */ @Configuration @AutoConfigureBefore(JmsAutoConfiguration.class) +@AutoConfigureAfter({ JtaAutoConfiguration.class, + JndiConnectionFactoryAutoConfiguration.class }) @ConditionalOnClass({ ConnectionFactory.class, HornetQJMSClient.class }) +@ConditionalOnMissingBean(ConnectionFactory.class) @EnableConfigurationProperties(HornetQProperties.class) @Import({ HornetQEmbeddedServerConfiguration.class, HornetQXAConnectionFactoryConfiguration.class,