Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions sdk/spring/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
### Spring Cloud Azure Autoconfigure
This section includes changes in `spring-cloud-azure-autoconfigure` module.

#### Features Added

- Change default connection factory of JMS listener container to native Service Bus connection factory. [#47413](https://github.com/Azure/azure-sdk-for-java/issues/47413)

#### Bugs Fixed

- 2 `TokenCredential` bean found in AzureServiceBusMessagingAutoConfiguration. [#47470](https://github.com/Azure/azure-sdk-for-java/pull/47470)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,12 @@ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
BindResult<Boolean> poolEnabledResult = Binder.get(environment).bind("spring.jms.servicebus.pool.enabled", Boolean.class);
BindResult<Boolean> cacheEnabledResult = Binder.get(environment).bind("spring.jms.cache.enabled", Boolean.class);

if (isPoolConnectionFactoryClassPresent()
&& ((!cacheEnabledResult.isBound() && !poolEnabledResult.isBound()) || poolEnabledResult.orElseGet(() -> false))) {
if (isPoolConnectionFactoryClassPresent() && poolEnabledResult.orElseGet(() -> false)) {
registerJmsPoolConnectionFactory(registry);
return;
}

if (isCacheConnectionFactoryClassPresent() && (!cacheEnabledResult.isBound() || cacheEnabledResult.orElseGet(() -> false))) {
if (isCacheConnectionFactoryClassPresent() && cacheEnabledResult.orElseGet(() -> false)) {
registerJmsCachingConnectionFactory(registry);
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@

package com.azure.spring.cloud.autoconfigure.implementation.jms;

import com.azure.servicebus.jms.ServiceBusJmsConnectionFactory;
import com.azure.spring.cloud.autoconfigure.implementation.context.properties.AzureGlobalProperties;
import com.azure.spring.cloud.autoconfigure.implementation.jms.properties.AzureServiceBusJmsProperties;
import com.azure.spring.cloud.core.provider.connectionstring.StaticConnectionStringProvider;
import com.azure.spring.cloud.core.service.AzureServiceType;
import com.azure.servicebus.jms.ServiceBusJmsConnectionFactory;
import jakarta.jms.ConnectionFactory;
import jakarta.jms.Session;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
Expand Down Expand Up @@ -60,6 +61,7 @@ private void testQueueJmsListenerContainerFactoryWithCustomSettings(AssertableAp
assertThat(container.getMaxConcurrentConsumers()).isEqualTo(10);
assertThat(container).hasFieldOrPropertyWithValue("receiveTimeout", 2000L);
assertThat(container.isReplyPubSubDomain()).isFalse();
Assertions.assertNotNull(container.getReplyQosSettings());
Comment thread
rujche marked this conversation as resolved.
Outdated
assertThat(container.getReplyQosSettings().getPriority()).isEqualTo(1);
assertThat(container.isSubscriptionDurable()).isFalse();
assertThat(container.isSubscriptionShared()).isFalse();
Expand All @@ -79,14 +81,15 @@ private void testTopicJmsListenerContainerFactoryWithCustomSettings(AssertableAp
assertThat(container.getMaxConcurrentConsumers()).isEqualTo(10);
assertThat(container).hasFieldOrPropertyWithValue("receiveTimeout", 2000L);
assertThat(container.isReplyPubSubDomain()).isFalse();
Assertions.assertNotNull(container.getReplyQosSettings());
Comment thread
rujche marked this conversation as resolved.
Outdated
assertThat(container.getReplyQosSettings().getPriority()).isEqualTo(1);
assertThat(container.isSubscriptionDurable()).isTrue();
assertThat(container.isSubscriptionShared()).isFalse();
assertThat(container.getPhase()).isEqualTo(2147483647);
}

@ParameterizedTest
@ValueSource(classes = { ConnectionFactory.class, JmsConnectionFactory.class, JmsTemplate.class })
@ValueSource(classes = {ConnectionFactory.class, JmsConnectionFactory.class, JmsTemplate.class})
void autoconfigurationNotEnabled(Class<?> clz) {
this.contextRunner
.withClassLoader(new FilteredClassLoader(clz))
Expand All @@ -105,7 +108,7 @@ void contextFailedByConnectionStringNotConfigured() {
}

@ParameterizedTest
@ValueSource(strings = { "Ba", " ", "basic" })
@ValueSource(strings = {"Ba", " ", "basic"})
void contextFailedByPricingTierNotCorrectlyConfigured(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -119,7 +122,7 @@ void contextFailedByPricingTierNotCorrectlyConfigured(String pricingTier) {
}

@ParameterizedTest
@ValueSource(strings = { "premium" })
@ValueSource(strings = {"premium"})
void autoconfigurationEnabledAndContextSuccessWithPremiumTier(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -138,7 +141,7 @@ void autoconfigurationEnabledAndContextSuccessWithPremiumTier(String pricingTier
}

@ParameterizedTest
@ValueSource(strings = { "standard" })
@ValueSource(strings = {"standard"})
void autoconfigurationEnabledAndContextSuccessWithStandardTier(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -157,42 +160,36 @@ void autoconfigurationEnabledAndContextSuccessWithStandardTier(String pricingTie
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
@ValueSource(strings = {"standard", "premium"})
void autoconfigurationDisabled(String pricingTier) {
this.contextRunner
.withPropertyValues(
"spring.jms.servicebus.enabled=false",
"spring.jms.servicebus.pricing-tier=" + pricingTier,
"spring.jms.servicebus.connection-string=" + CONNECTION_STRING)
.run(context -> {
assertThat(context).doesNotHaveBean(AzureServiceBusJmsProperties.class);
});
.run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJmsProperties.class));
}

@Test
void autoconfigurationDisabledCase2() {
this.contextRunner
.withPropertyValues(
"spring.jms.servicebus.enabled=false")
.run(context -> {
assertThat(context).doesNotHaveBean(AzureServiceBusJmsProperties.class);
});
.run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJmsProperties.class));
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
@ValueSource(strings = {"standard", "premium"})
void doesNotHaveBeanOfAzureServiceBusJmsPropertiesBeanPostProcessor(String pricingTier) {
this.contextRunner
.withPropertyValues(
"spring.jms.servicebus.pricing-tier=" + pricingTier,
"spring.jms.servicebus.connection-string=" + CONNECTION_STRING)
.run(context -> {
assertThat(context).doesNotHaveBean(AzureServiceBusJmsPropertiesBeanPostProcessor.class);
});
.run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJmsPropertiesBeanPostProcessor.class));
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
@ValueSource(strings = {"standard", "premium"})
void doesHaveBeanOfAzureServiceBusJmsPropertiesBeanPostProcessor(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -214,7 +211,7 @@ StaticConnectionStringProvider<AzureServiceType.ServiceBus> connectionStringProv
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
@ValueSource(strings = {"standard", "premium"})
void connectionFactoryIsAutowiredIntoJmsTemplateBean(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -227,7 +224,7 @@ void connectionFactoryIsAutowiredIntoJmsTemplateBean(String pricingTier) {
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
@ValueSource(strings = {"standard", "premium"})
void jmsPropertiesConfiguredCorrectly(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -251,7 +248,7 @@ void jmsPropertiesConfiguredCorrectly(String pricingTier) {
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
@ValueSource(strings = {"standard", "premium"})
void jmsServiceBusPropertiesConfigured(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -268,7 +265,7 @@ void jmsServiceBusPropertiesConfigured(String pricingTier) {
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
@ValueSource(strings = {"standard", "premium"})
void jmsListenerContainerFactoryConfiguredCorrectly(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -289,23 +286,28 @@ void jmsListenerContainerFactoryConfiguredCorrectly(String pricingTier) {
});
}


@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
void jmsPoolConnectionFactoryBeanConfiguredAsDefault(String pricingTier) {
@ValueSource(strings = {"standard", "premium"})
void nativeConnectionFactoryBeanConfiguredByDefaultInJmsListenerContainerFactory(String pricingTier) {
this.contextRunner
.withPropertyValues(
"spring.jms.servicebus.pricing-tier=" + pricingTier,
"spring.jms.servicebus.connection-string=" + CONNECTION_STRING)
.run(context -> {
assertThat(context).hasSingleBean(JmsPoolConnectionFactory.class);
assertThat(context).doesNotHaveBean(ServiceBusJmsConnectionFactory.class);
assertThat(context).hasSingleBean(ServiceBusJmsConnectionFactory.class);
assertThat(context).doesNotHaveBean(CachingConnectionFactory.class);
assertThat(context).doesNotHaveBean(JmsPoolConnectionFactory.class);
assertThat(context).getBean("jmsListenerContainerFactory")
.extracting("connectionFactory")
.isSameAs(context.getBean(ServiceBusJmsConnectionFactory.class));
assertThat(context).getBean("topicJmsListenerContainerFactory")
.extracting("connectionFactory")
.isSameAs(context.getBean(ServiceBusJmsConnectionFactory.class));
});
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
@ValueSource(strings = {"standard", "premium"})
void jmsPoolConnectionFactoryBeanConfiguredExplicitly(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -322,7 +324,7 @@ void jmsPoolConnectionFactoryBeanConfiguredExplicitly(String pricingTier) {
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
@ValueSource(strings = {"standard", "premium"})
void jmsPoolConnectionFactoryBeanConfiguredByPoolEnableCacheEnable(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -340,7 +342,7 @@ void jmsPoolConnectionFactoryBeanConfiguredByPoolEnableCacheEnable(String pricin
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
@ValueSource(strings = {"standard", "premium"})
void jmsPoolConnectionFactoryBeanConfiguredByPoolEnableCacheDisable(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -358,7 +360,7 @@ void jmsPoolConnectionFactoryBeanConfiguredByPoolEnableCacheDisable(String prici
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
@ValueSource(strings = {"standard", "premium"})
void cachingConnectionFactoryBeanConfiguredByCacheEnable(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -374,7 +376,7 @@ void cachingConnectionFactoryBeanConfiguredByCacheEnable(String pricingTier) {
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
@ValueSource(strings = {"standard", "premium"})
void cachingConnectionFactoryBeanConfiguredByPoolDisableCacheEnable(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -391,23 +393,23 @@ void cachingConnectionFactoryBeanConfiguredByPoolDisableCacheEnable(String prici
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
void cachingConnectionFactoryBeanConfiguredByPoolDisable(String pricingTier) {
@ValueSource(strings = {"standard", "premium"})
void nativeConnectionFactoryBeanConfiguredByPoolDisable(String pricingTier) {
this.contextRunner
.withPropertyValues(
"spring.jms.servicebus.pricing-tier=" + pricingTier,
"spring.jms.servicebus.connection-string=" + CONNECTION_STRING,
"spring.jms.servicebus.pool.enabled=false"
)
.run(context -> {
assertThat(context).hasSingleBean(CachingConnectionFactory.class);
assertThat(context).doesNotHaveBean(ServiceBusJmsConnectionFactory.class);
assertThat(context).hasSingleBean(ServiceBusJmsConnectionFactory.class);
assertThat(context).doesNotHaveBean(CachingConnectionFactory.class);
assertThat(context).doesNotHaveBean(JmsPoolConnectionFactory.class);
});
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
@ValueSource(strings = {"standard", "premium"})
void nativeConnectionFactoryBeanConfiguredByCacheDisable(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -424,7 +426,7 @@ void nativeConnectionFactoryBeanConfiguredByCacheDisable(String pricingTier) {
}

@ParameterizedTest
@ValueSource(strings = { "standard", "premium" })
@ValueSource(strings = {"standard", "premium"})
void nativeConnectionFactoryBeanConfiguredByPoolDisableCacheDisable(String pricingTier) {
this.contextRunner
.withPropertyValues(
Expand All @@ -437,6 +439,9 @@ void nativeConnectionFactoryBeanConfiguredByPoolDisableCacheDisable(String prici
assertThat(context).hasSingleBean(ServiceBusJmsConnectionFactory.class);
assertThat(context).doesNotHaveBean(CachingConnectionFactory.class);
assertThat(context).doesNotHaveBean(JmsPoolConnectionFactory.class);
assertThat(context).getBean("jmsListenerContainerFactory")
.extracting("connectionFactory")
.isSameAs(context.getBean(ServiceBusJmsConnectionFactory.class));
}
);
}
Expand Down
Loading