Skip to content

Commit 044882a

Browse files
authored
Add MongoConfigurationContributor tests and document it better (#76)
1 parent 011e6e4 commit 044882a

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

Diff for: src/main/java/com/mongodb/hibernate/service/spi/MongoConfigurationContributor.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import com.mongodb.hibernate.cfg.MongoConfigurator;
2020
import java.util.Map;
21+
import org.hibernate.boot.registry.StandardServiceRegistry;
2122
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
2223
import org.hibernate.service.Service;
2324
import org.hibernate.service.spi.Configurable;
@@ -53,7 +54,9 @@
5354
public interface MongoConfigurationContributor extends Service {
5455

5556
/**
56-
* Configures the MongoDB extension of Hibernate ORM.
57+
* Configures the MongoDB extension of Hibernate ORM. This method is called once per instance of
58+
* {@link StandardServiceRegistry} that has this {@link MongoConfigurationContributor}
59+
* {@linkplain StandardServiceRegistryBuilder#addService(Class, Service) added}.
5760
*
5861
* @param configurator The {@link MongoConfigurator} pre-configured with {@linkplain Configurable#configure(Map)
5962
* configuration properties}.

Diff for: src/test/java/com/mongodb/hibernate/internal/service/StandardServiceRegistryScopedStateTests.java

+31-1
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,21 @@
1616

1717
package com.mongodb.hibernate.internal.service;
1818

19+
import static org.junit.jupiter.api.Assertions.assertEquals;
1920
import static org.junit.jupiter.api.Assertions.assertNotSame;
2021

2122
import com.mongodb.hibernate.internal.extension.service.StandardServiceRegistryScopedState;
23+
import com.mongodb.hibernate.service.spi.MongoConfigurationContributor;
24+
import java.util.ArrayList;
25+
import org.hibernate.boot.MetadataSources;
2226
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
2327
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
28+
import org.junit.jupiter.api.DisplayName;
2429
import org.junit.jupiter.api.Test;
2530

2631
class StandardServiceRegistryScopedStateTests {
2732
@Test
28-
void differentStandardServiceRegistriesHaveDifferentStateInstances() {
33+
void differentStandardServiceRegistriesHaveDifferentStates() {
2934
try (var bootstrapServiceRegistry = new BootstrapServiceRegistryBuilder().build()) {
3035
var standardServiceRegistryBuilder = new StandardServiceRegistryBuilder(bootstrapServiceRegistry);
3136
try (var standardServiceRegistry1 = standardServiceRegistryBuilder.build();
@@ -36,4 +41,29 @@ void differentStandardServiceRegistriesHaveDifferentStateInstances() {
3641
}
3742
}
3843
}
44+
45+
@Test
46+
@DisplayName(
47+
"MongoConfigurationContributor is called once per StandardServiceRegistry, different MongoConfigurator instances passed")
48+
@SuppressWarnings("try")
49+
void mongoConfigurationContributorInvocationsAndMongoConfiguratorInstances() {
50+
try (var bootstrapServiceRegistry = new BootstrapServiceRegistryBuilder().build()) {
51+
var mongoConfigurators = new ArrayList<>();
52+
MongoConfigurationContributor mongoConfigurationContributor = mongoConfigurators::add;
53+
var standardServiceRegistryBuilder = new StandardServiceRegistryBuilder(bootstrapServiceRegistry)
54+
.addService(MongoConfigurationContributor.class, mongoConfigurationContributor);
55+
var metadataSources = new MetadataSources();
56+
try (var standardServiceRegistry1 = standardServiceRegistryBuilder.build();
57+
var sessionFactory1 = metadataSources
58+
.buildMetadata(standardServiceRegistry1)
59+
.buildSessionFactory();
60+
var standardServiceRegistry2 = standardServiceRegistryBuilder.build();
61+
var sessionFactory2 = metadataSources
62+
.buildMetadata(standardServiceRegistry2)
63+
.buildSessionFactory()) {
64+
assertEquals(2, mongoConfigurators.size());
65+
assertNotSame(mongoConfigurators.get(0), mongoConfigurators.get(1));
66+
}
67+
}
68+
}
3969
}

0 commit comments

Comments
 (0)