Skip to content

Commit

Permalink
Merge branch '3.2.x' into 3.3.x
Browse files Browse the repository at this point in the history
Closes gh-42421
  • Loading branch information
wilkinsona committed Sep 23, 2024
2 parents bc20582 + 2aea7ca commit 9c6a744
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ ActiveMQConnectionFactory jmsConnectionFactory(ArtemisProperties properties, Lis
private static ActiveMQConnectionFactory createJmsConnectionFactory(ArtemisProperties properties,
ArtemisConnectionDetails connectionDetails, ListableBeanFactory beanFactory) {
return new ArtemisConnectionFactoryFactory(beanFactory, properties, connectionDetails)
.createConnectionFactory(ActiveMQConnectionFactory.class);
.createConnectionFactory(ActiveMQConnectionFactory::new, ActiveMQConnectionFactory::new);
}

@Configuration(proxyBeanMethods = false)
Expand Down Expand Up @@ -93,7 +93,7 @@ JmsPoolConnectionFactory jmsConnectionFactory(ListableBeanFactory beanFactory, A
ArtemisConnectionDetails connectionDetails) {
ActiveMQConnectionFactory connectionFactory = new ArtemisConnectionFactoryFactory(beanFactory, properties,
connectionDetails)
.createConnectionFactory(ActiveMQConnectionFactory.class);
.createConnectionFactory(ActiveMQConnectionFactory::new, ActiveMQConnectionFactory::new);
return new JmsPoolConnectionFactoryFactory(properties.getPool())
.createPooledConnectionFactory(connectionFactory);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package org.springframework.boot.autoconfigure.jms.artemis;

import java.lang.reflect.Constructor;
import java.util.function.Function;

import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.api.core.client.ActiveMQClient;
Expand Down Expand Up @@ -61,10 +61,11 @@ class ArtemisConnectionFactoryFactory {
this.connectionDetails = connectionDetails;
}

<T extends ActiveMQConnectionFactory> T createConnectionFactory(Class<T> factoryClass) {
<T extends ActiveMQConnectionFactory> T createConnectionFactory(Function<String, T> nativeFactoryCreator,
Function<ServerLocator, T> embeddedFactoryCreator) {
try {
startEmbeddedJms();
return doCreateConnectionFactory(factoryClass);
return doCreateConnectionFactory(nativeFactoryCreator, embeddedFactoryCreator);
}
catch (Exception ex) {
throw new IllegalStateException("Unable to create ActiveMQConnectionFactory", ex);
Expand All @@ -84,15 +85,16 @@ private void startEmbeddedJms() {
}
}

private <T extends ActiveMQConnectionFactory> T doCreateConnectionFactory(Class<T> factoryClass) throws Exception {
private <T extends ActiveMQConnectionFactory> T doCreateConnectionFactory(Function<String, T> nativeFactoryCreator,
Function<ServerLocator, T> embeddedFactoryCreator) throws Exception {
ArtemisMode mode = this.connectionDetails.getMode();
if (mode == null) {
mode = deduceMode();
}
if (mode == ArtemisMode.EMBEDDED) {
return createEmbeddedConnectionFactory(factoryClass);
return createEmbeddedConnectionFactory(embeddedFactoryCreator);
}
return createNativeConnectionFactory(factoryClass);
return createNativeConnectionFactory(nativeFactoryCreator);
}

/**
Expand All @@ -115,23 +117,22 @@ private boolean isEmbeddedJmsClassPresent() {
return false;
}

private <T extends ActiveMQConnectionFactory> T createEmbeddedConnectionFactory(Class<T> factoryClass)
throws Exception {
private <T extends ActiveMQConnectionFactory> T createEmbeddedConnectionFactory(
Function<ServerLocator, T> factoryCreator) throws Exception {
try {
TransportConfiguration transportConfiguration = new TransportConfiguration(
InVMConnectorFactory.class.getName(), this.properties.getEmbedded().generateTransportParameters());
ServerLocator serviceLocator = ActiveMQClient.createServerLocatorWithoutHA(transportConfiguration);
return factoryClass.getConstructor(ServerLocator.class).newInstance(serviceLocator);
ServerLocator serverLocator = ActiveMQClient.createServerLocatorWithoutHA(transportConfiguration);
return factoryCreator.apply(serverLocator);
}
catch (NoClassDefFoundError ex) {
throw new IllegalStateException("Unable to create InVM "
+ "Artemis connection, ensure that artemis-jms-server.jar is in the classpath", ex);
}
}

private <T extends ActiveMQConnectionFactory> T createNativeConnectionFactory(Class<T> factoryClass)
throws Exception {
T connectionFactory = newNativeConnectionFactory(factoryClass);
private <T extends ActiveMQConnectionFactory> T createNativeConnectionFactory(Function<String, T> factoryCreator) {
T connectionFactory = newNativeConnectionFactory(factoryCreator);
String user = this.connectionDetails.getUser();
if (StringUtils.hasText(user)) {
connectionFactory.setUser(user);
Expand All @@ -140,12 +141,10 @@ private <T extends ActiveMQConnectionFactory> T createNativeConnectionFactory(Cl
return connectionFactory;
}

private <T extends ActiveMQConnectionFactory> T newNativeConnectionFactory(Class<T> factoryClass) throws Exception {
private <T extends ActiveMQConnectionFactory> T newNativeConnectionFactory(Function<String, T> factoryCreator) {
String brokerUrl = StringUtils.hasText(this.connectionDetails.getBrokerUrl())
? this.connectionDetails.getBrokerUrl() : DEFAULT_BROKER_URL;
Constructor<T> constructor = factoryClass.getConstructor(String.class);
return constructor.newInstance(brokerUrl);

return factoryCreator.apply(brokerUrl);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,14 @@ ConnectionFactory jmsConnectionFactory(ListableBeanFactory beanFactory, ArtemisP
ArtemisConnectionDetails connectionDetails, XAConnectionFactoryWrapper wrapper) throws Exception {
return wrapper
.wrapConnectionFactory(new ArtemisConnectionFactoryFactory(beanFactory, properties, connectionDetails)
.createConnectionFactory(ActiveMQXAConnectionFactory.class));
.createConnectionFactory(ActiveMQXAConnectionFactory::new, ActiveMQXAConnectionFactory::new));
}

@Bean
ActiveMQXAConnectionFactory nonXaJmsConnectionFactory(ListableBeanFactory beanFactory, ArtemisProperties properties,
ArtemisConnectionDetails connectionDetails) {
return new ArtemisConnectionFactoryFactory(beanFactory, properties, connectionDetails)
.createConnectionFactory(ActiveMQXAConnectionFactory.class);
.createConnectionFactory(ActiveMQXAConnectionFactory::new, ActiveMQXAConnectionFactory::new);
}

}

0 comments on commit 9c6a744

Please sign in to comment.