[DON'T REVIEW, TEST ONLY] Try to add CosmosDockerComposeConnectionDetailsFactory#47958
[DON'T REVIEW, TEST ONLY] Try to add CosmosDockerComposeConnectionDetailsFactory#47958
Conversation
…ners, and docker-compose Co-authored-by: rujche <171773178+rujche@users.noreply.github.com>
Co-authored-by: rujche <171773178+rujche@users.noreply.github.com>
This reverts commit e65c718.
…ure/azure-sdk-for-java into copilot/add-support-connectiondetails
…heckpointStore, Producer, and Consumer configs Prevent startup failures when EventHubs auto-config activates without base-level connection info. Without these guards, configurations that constructor-inject AzureEventHubsProperties could fail with UnsatisfiedDependencyException when only sub-level properties are set. - AzureBlobCheckpointStoreConfiguration: guard against missing properties bean - AzureEventHubsProducerClientConfiguration: guard dedicated producer config - AzureEventHubsConsumerClientConfiguration: guard dedicated consumer config - Updated tests to provide AzureEventHubsPropertiesTestConfiguration
API Change CheckAPIView identified API level changes in this PR and created the following API reviews |
There was a problem hiding this comment.
Pull request overview
This PR expands Spring Cloud Azure’s Service Connection support (Spring Boot ConnectionDetails) by adding Event Hubs and Cosmos coverage across the docker-compose and testcontainers integration modules, and refactors Event Hubs autoconfiguration to be driven by an AzureEventHubsProperties bean (including ConnectionDetails overrides).
Changes:
- Add Event Hubs
ConnectionDetails+ corresponding docker-compose and testcontainersConnectionDetailsFactoryimplementations (with new integration tests and emulator configs). - Add Cosmos docker-compose
ConnectionDetailsFactoryand a docker-compose based Cosmos persistence test. - Refactor Event Hubs autoconfigure property creation to support ConnectionDetails-driven overrides and adjust related tests.
Reviewed changes
Copilot reviewed 36 out of 38 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| sdk/spring/spring-cloud-azure-testcontainers/src/test/resources/eventhubs/Config.json | Adds Event Hubs emulator config for testcontainers-based tests. |
| sdk/spring/spring-cloud-azure-testcontainers/src/test/java/com/azure/spring/cloud/testcontainers/implementation/service/connection/hubs/EventHubsContainerConnectionDetailsFactoryTests.java | New test validating Event Hubs ConnectionDetails + producer send against emulator. |
| sdk/spring/spring-cloud-azure-testcontainers/src/test/java/com/azure/spring/cloud/testcontainers/implementation/service/connection/bus/ServiceBusContainerConnectionDetailsFactoryTests.java | Extends Service Bus test coverage to assert ConnectionDetails presence. |
| sdk/spring/spring-cloud-azure-testcontainers/src/main/resources/META-INF/spring.factories | Registers Event Hubs testcontainers ConnectionDetailsFactory. |
| sdk/spring/spring-cloud-azure-testcontainers/src/main/java/com/azure/spring/cloud/testcontainers/implementation/service/connection/hubs/EventHubsContainerConnectionDetailsFactory.java | Implements Event Hubs ConnectionDetailsFactory for testcontainers emulator. |
| sdk/spring/spring-cloud-azure-testcontainers/pom.xml | Moves messaging/emulator client deps to test scope and adds Event Hubs client for tests. |
| sdk/spring/spring-cloud-azure-docker-compose/src/test/resources/com/azure/spring/cloud/docker/compose/implementation/service/connection/hubs/eventhubs-compose.yaml | Adds docker-compose stack for Event Hubs emulator + Azurite. |
| sdk/spring/spring-cloud-azure-docker-compose/src/test/resources/com/azure/spring/cloud/docker/compose/implementation/service/connection/hubs/Config.json | Adds Event Hubs emulator config for docker-compose tests. |
| sdk/spring/spring-cloud-azure-docker-compose/src/test/resources/com/azure/spring/cloud/docker/compose/implementation/service/connection/cosmos/cosmos-compose.yaml | Adds docker-compose stack for Cosmos emulator. |
| sdk/spring/spring-cloud-azure-docker-compose/src/test/resources/com/azure/spring/cloud/docker/compose/implementation/service/connection/bus/servicebus-compose.yaml | Adds docker-compose stack for Service Bus emulator + SQL Edge. |
| sdk/spring/spring-cloud-azure-docker-compose/src/test/resources/com/azure/spring/cloud/docker/compose/implementation/service/connection/bus/Config.json | Adds Service Bus emulator config for docker-compose tests. |
| sdk/spring/spring-cloud-azure-docker-compose/src/test/java/com/azure/spring/cloud/docker/compose/implementation/service/connection/hubs/EventHubsDockerComposeConnectionDetailsFactoryTests.java | New test validating Event Hubs ConnectionDetails + producer send via docker-compose. |
| sdk/spring/spring-cloud-azure-docker-compose/src/test/java/com/azure/spring/cloud/docker/compose/implementation/service/connection/cosmos/CosmosDockerComposeConnectionDetailsFactoryTests.java | New Cosmos repository persistence test via docker-compose emulator. |
| sdk/spring/spring-cloud-azure-docker-compose/src/test/java/com/azure/spring/cloud/docker/compose/implementation/service/connection/bus/ServiceBusDockerComposeConnectionDetailsFactoryTests.java | Updates Service Bus compose test wiring and asserts ConnectionDetails presence. |
| sdk/spring/spring-cloud-azure-docker-compose/src/main/resources/META-INF/spring.factories | Registers Cosmos + Event Hubs docker-compose ConnectionDetailsFactory. |
| sdk/spring/spring-cloud-azure-docker-compose/src/main/java/com/azure/spring/cloud/docker/compose/implementation/service/connection/hubs/EventHubsDockerComposeConnectionDetailsFactory.java | Implements Event Hubs ConnectionDetailsFactory for docker-compose services. |
| sdk/spring/spring-cloud-azure-docker-compose/src/main/java/com/azure/spring/cloud/docker/compose/implementation/service/connection/cosmos/CosmosDockerComposeConnectionDetailsFactory.java | Implements Cosmos ConnectionDetailsFactory for docker-compose services. |
| sdk/spring/spring-cloud-azure-docker-compose/pom.xml | Adds Cosmos dependency (optional) and adds test dependencies for new integration tests. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/CustomAzureEventHubsConnectionDetails.java | Adds test ConnectionDetails implementation for override scenario. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/AzureEventHubsProducerClientConfigurationTests.java | Updates Event Hubs producer tests to include properties configuration. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/AzureEventHubsMessagingAutoConfigurationTests.java | Adjusts test wiring around properties configuration. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/AzureEventHubsConsumerClientConfigurationTests.java | Updates consumer tests to include properties configuration. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/AzureEventHubsClientBuilderConfigurationTests.java | Shifts tests to auto-config entrypoint and updates required beans. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/AzureEventHubsAutoConfigurationTests.java | Adds test ensuring ConnectionDetails overrides property connection string. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/servicebus/AzureServiceBusAutoConfiguration.java | Removes base-class inheritance; relies on imported properties configuration. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/properties/ConfigurationWithoutConnectionDetailsBean.java | New properties bean path when ConnectionDetails aren’t present. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/properties/ConfigurationWithConnectionDetailsBean.java | New properties bean path that binds env + applies ConnectionDetails override. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/properties/AzureEventHubsPropertiesConfiguration.java | New configuration that selects property creation strategy (with/without ConnectionDetails). |
| sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/properties/AzureEventHubsConnectionDetails.java | Introduces Event Hubs ConnectionDetails interface. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/AzureEventHubsProducerClientConfiguration.java | Makes producer config conditional on AzureEventHubsProperties bean. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/AzureEventHubsProcessorClientConfiguration.java | Tightens bean conditions to include AzureEventHubsProperties; removes unused inner condition class. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/AzureEventHubsMessagingAutoConfiguration.java | Removes redundant property-based activation; relies on properties bean presence. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/AzureEventHubsConsumerClientConfiguration.java | Makes consumer config conditional on AzureEventHubsProperties bean. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/AzureEventHubsClientBuilderConfiguration.java | Refactors to be properties-bean-driven and provides static connection-string provider. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/AzureEventHubsAutoConfiguration.java | Removes base-class inheritance; imports new properties configuration. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/eventhubs/AzureBlobCheckpointStoreConfiguration.java | Adds @ConditionalOnBean(AzureEventHubsProperties.class) guard. |
| sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/cosmos/AzureCosmosAutoConfiguration.java | Removes base-class inheritance; relies on imported properties configuration. |
| sdk/spring/CHANGELOG.md | Adds docker-compose Cosmos entry (but currently incomplete vs actual PR scope). |
| <dependency> | ||
| <groupId>com.azure</groupId> | ||
| <artifactId>azure-messaging-servicebus</artifactId> | ||
| <version>7.17.17</version> <!-- {x-version-update;com.azure:azure-messaging-servicebus;dependency} --> | ||
| <artifactId>azure-cosmos</artifactId> | ||
| <version>4.77.0</version> <!-- {x-version-update;com.azure:azure-cosmos;dependency} --> | ||
| <optional>true</optional> | ||
| </dependency> |
There was a problem hiding this comment.
CosmosDockerComposeConnectionDetailsFactory is registered in this module’s META-INF/spring.factories, but azure-cosmos is declared as an optional dependency. If an application uses this docker-compose module for Service Bus/Storage only (and doesn’t otherwise include azure-cosmos), classloading the Cosmos connection-details factory can fail with NoClassDefFoundError during Spring factories loading. Consider making azure-cosmos a non-optional dependency here, or otherwise isolating/guarding the Cosmos factory so it isn’t loaded when azure-cosmos isn’t on the classpath.
| #### New Features | ||
|
|
||
| - Add ServiceBusDockerComposeConnectionDetailsFactory. [#44019](https://github.com/Azure/azure-sdk-for-java/pull/44019). | ||
| - Add CosmosDockerComposeConnectionDetailsFactory. [#44019](https://github.com/Azure/azure-sdk-for-java/pull/44019). | ||
|
|
There was a problem hiding this comment.
The changelog entry for this release mentions the Service Bus and Cosmos Docker Compose factories, but this PR also adds Event Hubs Docker Compose/Testcontainers connection details support and an Event Hubs ConnectionDetails interface in autoconfigure. Please add corresponding changelog entries so the release notes reflect all user-visible additions.
| - Add ServiceBusDockerComposeConnectionDetailsFactory. [#44019](https://github.com/Azure/azure-sdk-for-java/pull/44019). | ||
| - Add CosmosDockerComposeConnectionDetailsFactory. [#44019](https://github.com/Azure/azure-sdk-for-java/pull/44019). |
There was a problem hiding this comment.
The PR title/description says "[DON'T REVIEW, TEST ONLY]", but the diff includes new production code (new ConnectionDetails interfaces/configuration and new Docker Compose/Testcontainers factories) plus a CHANGELOG update. Please update the PR metadata to accurately describe the change so reviewers and release tooling can triage it correctly.
| "PartitionCount": "2", | ||
| "ConsumerGroups": [] |
There was a problem hiding this comment.
PartitionCount is encoded as a JSON string ("2"). Event Hubs emulator configs typically expect this field to be a JSON number; leaving it as a string can cause the emulator to reject the config or misread it. Change the value to a numeric literal (e.g., 2).
| "PartitionCount": "2", | ||
| "ConsumerGroups": [] |
There was a problem hiding this comment.
PartitionCount is encoded as a JSON string ("2"). Event Hubs emulator configs typically expect this field to be a JSON number; leaving it as a string can cause the emulator to reject the config or misread it. Change the value to a numeric literal (e.g., 2).
|
Confirmed that test failed with log like this: |
Link to related comment: #41321 (comment)