Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package com.mongodb.hibernate;

import com.mongodb.hibernate.service.spi.MongoConfigurationContributor;
import com.mongodb.hibernate.cfg.spi.MongoConfigurationContributor;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.service.spi.ServiceContributor;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@

import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.hibernate.cfg.spi.MongoConfigurationContributor;
import com.mongodb.hibernate.internal.Sealed;
import com.mongodb.hibernate.service.spi.MongoConfigurationContributor;
import java.util.Map;
import java.util.function.Consumer;
import org.hibernate.cfg.AvailableSettings;
Expand Down
8 changes: 7 additions & 1 deletion src/main/java/com/mongodb/hibernate/cfg/package-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,13 @@
* limitations under the License.
*/

/** Program elements related to configuring the MongoDB Extension for Hibernate ORM. */
/**
* Program elements related to configuring the MongoDB Extension for Hibernate ORM.
*
* <p>See {@link com.mongodb.hibernate.cfg.spi.MongoConfigurationContributor} for the details on programmatically
* configuring the MongoDB Extension for Hibernate ORM, and {@link com.mongodb.hibernate.cfg.MongoConfigurator} for the
* details on the supported configuration properties.
*/
@NullMarked
package com.mongodb.hibernate.cfg;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.mongodb.hibernate.service.spi;
package com.mongodb.hibernate.cfg.spi;

import com.mongodb.hibernate.cfg.MongoConfigurator;
import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
* limitations under the License.
*/

/** SPI related to configuring the MongoDB Extension for Hibernate ORM. */
@NullMarked
package com.mongodb.hibernate.service;
package com.mongodb.hibernate.cfg.spi;

import org.jspecify.annotations.NullMarked;
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@
import static org.hibernate.cfg.AvailableSettings.JAVA_TIME_USE_DIRECT_JDBC;
import static org.hibernate.cfg.AvailableSettings.PREFERRED_INSTANT_JDBC_TYPE;

import com.mongodb.hibernate.cfg.spi.MongoConfigurationContributor;
import com.mongodb.hibernate.internal.VisibleForTesting;
import com.mongodb.hibernate.internal.cfg.MongoConfiguration;
import com.mongodb.hibernate.internal.cfg.MongoConfigurationBuilder;
import com.mongodb.hibernate.service.spi.MongoConfigurationContributor;
import java.io.IOException;
import java.io.NotSerializableException;
import java.io.ObjectOutputStream;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,19 @@
* limitations under the License.
*/

package com.mongodb.hibernate.service;
package com.mongodb.hibernate.cfg.spi;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotSame;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;

import com.mongodb.event.ClusterClosedEvent;
import com.mongodb.event.ClusterListener;
import com.mongodb.hibernate.service.spi.MongoConfigurationContributor;
import java.time.Duration;
import java.util.ArrayList;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
Expand All @@ -33,7 +35,9 @@
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

class MongoConfigurationContributorTests {
Expand All @@ -59,6 +63,28 @@ void exceptionPropagates() {
assertSame(expected, actual.getCause());
}

@Test
@DisplayName(
"MongoConfigurationContributor is called once per StandardServiceRegistry, different MongoConfigurator instances passed")
@SuppressWarnings("try")
void invocationsAndMongoConfiguratorInstances() {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test is former StandardServiceRegistryScopedStateTests.mongoConfigurationContributorInvocationsAndMongoConfiguratorInstances. I moved it, and simplified: we don't need to close bootstrapServiceRegistry, standardServiceRegistry1, standardServiceRegistry2, because we have session factories successfully created here, and we close them, which causes the service registries to be automatically-closed (see https://docs.hibernate.org/orm/6.6/javadocs/org/hibernate/boot/registry/BootstrapServiceRegistryBuilder.html#disableAutoClose() and https://docs.hibernate.org/orm/6.6/javadocs/org/hibernate/boot/registry/StandardServiceRegistryBuilder.html#disableAutoClose()).

var bootstrapServiceRegistry = new BootstrapServiceRegistryBuilder().build();
var mongoConfigurators = new ArrayList<>();
MongoConfigurationContributor mongoConfigurationContributor = mongoConfigurators::add;
var standardServiceRegistryBuilder = new StandardServiceRegistryBuilder(bootstrapServiceRegistry)
.addService(MongoConfigurationContributor.class, mongoConfigurationContributor);
var metadataSources = new MetadataSources();
var standardServiceRegistry1 = standardServiceRegistryBuilder.build();
var standardServiceRegistry2 = standardServiceRegistryBuilder.build();
try (var sessionFactory1 =
metadataSources.buildMetadata(standardServiceRegistry1).buildSessionFactory();
var sessionFactory2 =
metadataSources.buildMetadata(standardServiceRegistry2).buildSessionFactory()) {
assertEquals(2, mongoConfigurators.size());
assertNotSame(mongoConfigurators.get(0), mongoConfigurators.get(1));
}
}

private static SessionFactory buildSessionFactory(MongoConfigurationContributor mongoConfigurationContributor) {
return new MetadataSources(new StandardServiceRegistryBuilder()
.addService(MongoConfigurationContributor.class, mongoConfigurationContributor)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,11 @@

package com.mongodb.hibernate.internal.service;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotSame;

import com.mongodb.hibernate.internal.extension.service.StandardServiceRegistryScopedState;
import com.mongodb.hibernate.service.spi.MongoConfigurationContributor;
import java.util.ArrayList;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

class StandardServiceRegistryScopedStateTests {
Expand All @@ -41,29 +36,4 @@ void differentStandardServiceRegistriesHaveDifferentStates() {
}
}
}

@Test
@DisplayName(
"MongoConfigurationContributor is called once per StandardServiceRegistry, different MongoConfigurator instances passed")
@SuppressWarnings("try")
void mongoConfigurationContributorInvocationsAndMongoConfiguratorInstances() {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I moved this test to MongoConfigurationContributorTests, as it is about MongoConfigurationContributor.

try (var bootstrapServiceRegistry = new BootstrapServiceRegistryBuilder().build()) {
var mongoConfigurators = new ArrayList<>();
MongoConfigurationContributor mongoConfigurationContributor = mongoConfigurators::add;
var standardServiceRegistryBuilder = new StandardServiceRegistryBuilder(bootstrapServiceRegistry)
.addService(MongoConfigurationContributor.class, mongoConfigurationContributor);
var metadataSources = new MetadataSources();
try (var standardServiceRegistry1 = standardServiceRegistryBuilder.build();
var sessionFactory1 = metadataSources
.buildMetadata(standardServiceRegistry1)
.buildSessionFactory();
var standardServiceRegistry2 = standardServiceRegistryBuilder.build();
var sessionFactory2 = metadataSources
.buildMetadata(standardServiceRegistry2)
.buildSessionFactory()) {
assertEquals(2, mongoConfigurators.size());
assertNotSame(mongoConfigurators.get(0), mongoConfigurators.get(1));
}
}
}
}