From 9c1d455c8a0d4d7dff8cfeb9e2d1374b85ce0e81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Wed, 15 Mar 2023 10:50:19 +0100 Subject: [PATCH] HHH-16310 Centralize the detection of multitenancy --- .../org/hibernate/boot/internal/MetadataBuilderImpl.java | 4 ++-- .../boot/internal/SessionFactoryOptionsBuilder.java | 3 ++- .../internal/ConnectionProviderInitiator.java | 3 ++- .../engine/jdbc/env/internal/JdbcEnvironmentImpl.java | 5 +++++ .../jdbc/env/internal/JdbcEnvironmentInitiator.java | 9 +++------ .../hibernate/engine/jdbc/internal/JdbcServicesImpl.java | 7 +------ 6 files changed, 15 insertions(+), 16 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/boot/internal/MetadataBuilderImpl.java b/hibernate-core/src/main/java/org/hibernate/boot/internal/MetadataBuilderImpl.java index ced669ef1d..45ea63458e 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/internal/MetadataBuilderImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/internal/MetadataBuilderImpl.java @@ -64,7 +64,7 @@ import org.hibernate.cfg.MetadataSourceType; import org.hibernate.dialect.TimeZoneSupport; import org.hibernate.engine.config.spi.ConfigurationService; import org.hibernate.engine.config.spi.StandardConverters; -import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider; +import org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl; import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.id.factory.IdentifierGeneratorFactory; import org.hibernate.internal.CoreLogging; @@ -619,7 +619,7 @@ public class MetadataBuilderImpl implements MetadataBuilderImplementor, TypeCont this.mappingDefaults = new MappingDefaultsImpl( serviceRegistry ); this.defaultTimezoneStorage = resolveTimeZoneStorageStrategy( configService ); - this.multiTenancyEnabled = serviceRegistry.getService(MultiTenantConnectionProvider.class)!=null; + this.multiTenancyEnabled = JdbcEnvironmentImpl.isMultiTenancyEnabled( serviceRegistry ); this.xmlMappingEnabled = configService.getSetting( AvailableSettings.XML_MAPPING_ENABLED, diff --git a/hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java b/hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java index 36f49123b8..0df65f48d2 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java @@ -41,6 +41,7 @@ import org.hibernate.context.spi.CurrentTenantIdentifierResolver; import org.hibernate.dialect.Dialect; import org.hibernate.engine.config.spi.ConfigurationService; import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider; +import org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl; import org.hibernate.engine.jdbc.env.spi.ExtractedDatabaseMetaData; import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.id.uuid.LocalObjectUuidHelper; @@ -352,7 +353,7 @@ public class SessionFactoryOptionsBuilder implements SessionFactoryOptions { this.checkNullability = configurationService.getSetting( CHECK_NULLABILITY, BOOLEAN, true ); this.initializeLazyStateOutsideTransactions = configurationService.getSetting( ENABLE_LAZY_LOAD_NO_TRANS, BOOLEAN, false ); - this.multiTenancyEnabled = serviceRegistry.getService(MultiTenantConnectionProvider.class)!=null; + this.multiTenancyEnabled = JdbcEnvironmentImpl.isMultiTenancyEnabled( serviceRegistry ); this.currentTenantIdentifierResolver = strategySelector.resolveStrategy( CurrentTenantIdentifierResolver.class, configurationSettings.get( MULTI_TENANT_IDENTIFIER_RESOLVER ) diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/ConnectionProviderInitiator.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/ConnectionProviderInitiator.java index 3a6b5a9103..832a6fd546 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/ConnectionProviderInitiator.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/ConnectionProviderInitiator.java @@ -22,6 +22,7 @@ import org.hibernate.boot.registry.selector.spi.StrategySelector; import org.hibernate.cfg.AvailableSettings; import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider; import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider; +import org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl; import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; import org.hibernate.internal.log.DeprecationLogger; @@ -94,7 +95,7 @@ public class ConnectionProviderInitiator implements StandardServiceInitiator configurationValues, ServiceRegistryImplementor registry) { - if ( registry.getService( MultiTenantConnectionProvider.class ) != null ) { + if ( JdbcEnvironmentImpl.isMultiTenancyEnabled( registry ) ) { // nothing to do, but given the separate hierarchies have to handle this here. return null; } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentImpl.java index 2a5f22520d..395653502d 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentImpl.java @@ -16,6 +16,7 @@ import org.hibernate.dialect.Dialect; import org.hibernate.engine.config.spi.ConfigurationService; import org.hibernate.engine.config.spi.StandardConverters; import org.hibernate.engine.jdbc.connections.spi.JdbcConnectionAccess; +import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider; import org.hibernate.engine.jdbc.env.spi.ExtractedDatabaseMetaData; import org.hibernate.engine.jdbc.env.spi.IdentifierHelper; import org.hibernate.engine.jdbc.env.spi.IdentifierHelperBuilder; @@ -42,6 +43,10 @@ import org.jboss.logging.Logger; public class JdbcEnvironmentImpl implements JdbcEnvironment { private static final Logger log = Logger.getLogger( JdbcEnvironmentImpl.class ); + public static boolean isMultiTenancyEnabled(ServiceRegistry serviceRegistry) { + return serviceRegistry.getService( MultiTenantConnectionProvider.class ) != null; + } + private final Dialect dialect; private final SqlAstTranslatorFactory sqlAstTranslatorFactory; diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentInitiator.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentInitiator.java index 8c2a31e93b..4dafab422f 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentInitiator.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentInitiator.java @@ -279,8 +279,7 @@ public class JdbcEnvironmentInitiator implements StandardServiceInitiator