Migrate from deprecated Artemis EmbeddedJMS
Closes gh-16646
This commit is contained in:
parent
b210d2fcef
commit
42e0dc14b5
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue