diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/artemis/ArtemisEmbeddedServerConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/artemis/ArtemisEmbeddedServerConfiguration.java index c36ab76a3c9..300b2639057 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/artemis/ArtemisEmbeddedServerConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/artemis/ArtemisEmbeddedServerConfiguration.java @@ -19,13 +19,16 @@ package org.springframework.boot.autoconfigure.jms.artemis; import java.util.List; import java.util.stream.Collectors; +import org.apache.activemq.artemis.api.core.RoutingType; +import org.apache.activemq.artemis.core.config.CoreAddressConfiguration; +import org.apache.activemq.artemis.core.config.CoreQueueConfiguration; +import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ; import org.apache.activemq.artemis.jms.server.config.JMSConfiguration; import org.apache.activemq.artemis.jms.server.config.JMSQueueConfiguration; import org.apache.activemq.artemis.jms.server.config.TopicConfiguration; import org.apache.activemq.artemis.jms.server.config.impl.JMSConfigurationImpl; import org.apache.activemq.artemis.jms.server.config.impl.JMSQueueConfigurationImpl; import org.apache.activemq.artemis.jms.server.config.impl.TopicConfigurationImpl; -import org.apache.activemq.artemis.jms.server.embedded.EmbeddedJMS; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -42,7 +45,7 @@ import org.springframework.context.annotation.Configuration; * @author Stephane Nicoll */ @Configuration(proxyBeanMethods = false) -@ConditionalOnClass(EmbeddedJMS.class) +@ConditionalOnClass(EmbeddedActiveMQ.class) @ConditionalOnProperty(prefix = "spring.artemis.embedded", name = "enabled", havingValue = "true", matchIfMissing = true) class ArtemisEmbeddedServerConfiguration { @@ -61,15 +64,25 @@ class ArtemisEmbeddedServerConfiguration { @Bean(initMethod = "start", destroyMethod = "stop") @ConditionalOnMissingBean - EmbeddedJMS artemisServer(org.apache.activemq.artemis.core.config.Configuration configuration, - JMSConfiguration jmsConfiguration, - ObjectProvider configurationCustomizers) { - EmbeddedJMS server = new EmbeddedJMS(); + EmbeddedActiveMQ embeddedActiveMq(org.apache.activemq.artemis.core.config.Configuration configuration, + JMSConfiguration jmsConfiguration, ObjectProvider configurationCustomizers) + throws Exception { + for (JMSQueueConfiguration queueConfiguration : jmsConfiguration.getQueueConfigurations()) { + String queueName = queueConfiguration.getName(); + configuration.addAddressConfiguration( + new CoreAddressConfiguration().setName(queueName).addRoutingType(RoutingType.ANYCAST) + .addQueueConfiguration(new CoreQueueConfiguration().setAddress(queueName).setName(queueName) + .setFilterString(queueConfiguration.getSelector()) + .setDurable(queueConfiguration.isDurable()).setRoutingType(RoutingType.ANYCAST))); + } + for (TopicConfiguration topicConfiguration : jmsConfiguration.getTopicConfigurations()) { + configuration.addAddressConfiguration(new CoreAddressConfiguration().setName(topicConfiguration.getName()) + .addRoutingType(RoutingType.MULTICAST)); + } configurationCustomizers.orderedStream().forEach((customizer) -> customizer.customize(configuration)); - server.setConfiguration(configuration); - server.setJmsConfiguration(jmsConfiguration); - server.setRegistry(new ArtemisNoOpBindingRegistry()); - return server; + EmbeddedActiveMQ embeddedActiveMq = new EmbeddedActiveMQ(); + embeddedActiveMq.setConfiguration(configuration); + return embeddedActiveMq; } @Bean diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/artemis/ArtemisAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/artemis/ArtemisAutoConfigurationTests.java index db8af7ae0ad..2fec14d579e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/artemis/ArtemisAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/artemis/ArtemisAutoConfigurationTests.java @@ -31,7 +31,9 @@ import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.TransportConfiguration; import org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnectorFactory; import org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnectorFactory; +import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.server.BindingQueryResult; +import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ; import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; import org.apache.activemq.artemis.jms.server.config.JMSConfiguration; import org.apache.activemq.artemis.jms.server.config.JMSQueueConfiguration; @@ -39,7 +41,6 @@ import org.apache.activemq.artemis.jms.server.config.TopicConfiguration; import org.apache.activemq.artemis.jms.server.config.impl.JMSConfigurationImpl; import org.apache.activemq.artemis.jms.server.config.impl.JMSQueueConfigurationImpl; import org.apache.activemq.artemis.jms.server.config.impl.TopicConfigurationImpl; -import org.apache.activemq.artemis.jms.server.embedded.EmbeddedJMS; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import org.messaginghub.pooled.jms.JmsPoolConnectionFactory; @@ -151,7 +152,7 @@ class ArtemisAutoConfigurationTests { .withPropertyValues("spring.artemis.mode:embedded").run((context) -> { ArtemisProperties properties = context.getBean(ArtemisProperties.class); assertThat(properties.getMode()).isEqualTo(ArtemisMode.EMBEDDED); - assertThat(context).hasSingleBean(EmbeddedJMS.class); + assertThat(context).hasSingleBean(EmbeddedActiveMQ.class); org.apache.activemq.artemis.core.config.Configuration configuration = context .getBean(org.apache.activemq.artemis.core.config.Configuration.class); assertThat(configuration.isPersistenceEnabled()).isFalse(); @@ -164,7 +165,7 @@ class ArtemisAutoConfigurationTests { void embeddedConnectionFactoryByDefault() { // No mode is specified this.contextRunner.withUserConfiguration(EmptyConfiguration.class).run((context) -> { - assertThat(context).hasSingleBean(EmbeddedJMS.class); + assertThat(context).hasSingleBean(EmbeddedActiveMQ.class); org.apache.activemq.artemis.core.config.Configuration configuration = context .getBean(org.apache.activemq.artemis.core.config.Configuration.class); assertThat(configuration.isPersistenceEnabled()).isFalse(); @@ -178,7 +179,7 @@ class ArtemisAutoConfigurationTests { // No mode is specified this.contextRunner.withUserConfiguration(EmptyConfiguration.class) .withPropertyValues("spring.artemis.embedded.enabled:false").run((context) -> { - assertThat(context).doesNotHaveBean(EmbeddedJMS.class); + assertThat(context).doesNotHaveBean(ActiveMQServer.class); assertNettyConnectionFactory(getActiveMQConnectionFactory(context.getBean(ConnectionFactory.class)), "localhost", 61616); }); @@ -190,7 +191,7 @@ class ArtemisAutoConfigurationTests { this.contextRunner.withUserConfiguration(EmptyConfiguration.class) .withPropertyValues("spring.artemis.mode:embedded", "spring.artemis.embedded.enabled:false") .run((context) -> { - assertThat(context.getBeansOfType(EmbeddedJMS.class)).isEmpty(); + assertThat(context.getBeansOfType(ActiveMQServer.class)).isEmpty(); assertInVmConnectionFactory(getActiveMQConnectionFactory(context.getBean(ConnectionFactory.class))); }); } @@ -379,10 +380,10 @@ class ArtemisAutoConfigurationTests { private static final class DestinationChecker { - private final EmbeddedJMS embeddedJms; + private final ActiveMQServer server; private DestinationChecker(ApplicationContext applicationContext) { - this.embeddedJms = applicationContext.getBean(EmbeddedJMS.class); + this.server = applicationContext.getBean(EmbeddedActiveMQ.class).getActiveMQServer(); } void checkQueue(String name, boolean shouldExist) { @@ -395,7 +396,7 @@ class ArtemisAutoConfigurationTests { void checkDestination(String name, RoutingType routingType, boolean shouldExist) { try { - BindingQueryResult result = this.embeddedJms.getActiveMQServer().bindingQuery(new SimpleString(name)); + BindingQueryResult result = this.server.bindingQuery(new SimpleString(name)); assertThat(result.isExists()).isEqualTo(shouldExist); if (shouldExist) { assertThat(result.getAddressInfo().getRoutingType()).isEqualTo(routingType);