Migrate from deprecated Artemis EmbeddedJMS

Closes gh-16646
This commit is contained in:
Andy Wilkinson 2019-09-23 18:27:03 +01:00
parent b210d2fcef
commit 42e0dc14b5
2 changed files with 32 additions and 18 deletions

View File

@ -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<ArtemisConfigurationCustomizer> configurationCustomizers) {
EmbeddedJMS server = new EmbeddedJMS();
EmbeddedActiveMQ embeddedActiveMq(org.apache.activemq.artemis.core.config.Configuration configuration,
JMSConfiguration jmsConfiguration, ObjectProvider<ArtemisConfigurationCustomizer> 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

View File

@ -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);