This is an automated email from the ASF dual-hosted git repository.

borinquenkid pushed a commit to branch 8.0.x-hibernate7-dev
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit b47d7c88e128365aefee9464f1ca034a55feeb31
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Wed Mar 4 15:10:12 2026 -0600

    refactor(hibernate7): more cleanup HibernateDatastore
---
 .../grails/orm/hibernate/HibernateDatastore.java   | 53 +++++++++++++---------
 .../HibernateConnectionSourceFactory.java          |  6 +--
 .../ConnectionSourcesInitializer.groovy            |  6 +--
 3 files changed, 38 insertions(+), 27 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java
index f82c3bf47f..a15eeeefc9 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java
@@ -22,6 +22,7 @@ import grails.gorm.MultiTenant;
 import grails.gorm.multitenancy.Tenants;
 import groovy.lang.Closure;
 import jakarta.annotation.PreDestroy;
+import org.springframework.lang.Nullable;
 import java.io.Closeable;
 import java.io.IOException;
 import java.io.Serializable;
@@ -76,6 +77,8 @@ import 
org.grails.orm.hibernate.connections.HibernateConnectionSourceSettings;
 import org.grails.orm.hibernate.event.listener.HibernateEventListener;
 import org.grails.orm.hibernate.multitenancy.MultiTenantEventListener;
 import org.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor;
+
+import org.checkerframework.checker.nullness.qual.NonNull;
 import org.hibernate.FlushMode;
 import org.hibernate.SessionFactory;
 import org.hibernate.boot.Metadata;
@@ -382,7 +385,7 @@ public class HibernateDatastore extends AbstractDatastore
   public HibernateDatastore(
       PropertyResolver configuration,
       ConfigurableApplicationEventPublisher eventPublisher,
-      Class... classes) {
+      Class<?>... classes) {
     this(configuration, new HibernateConnectionSourceFactory(classes), 
eventPublisher);
   }
 
@@ -397,7 +400,7 @@ public class HibernateDatastore extends AbstractDatastore
       DataSource dataSource,
       PropertyResolver configuration,
       ConfigurableApplicationEventPublisher eventPublisher,
-      Class... classes) {
+      Class<?>... classes) {
     this(configuration, createConnectionFactoryForDataSource(dataSource, 
classes), eventPublisher);
   }
 
@@ -440,7 +443,7 @@ public class HibernateDatastore extends AbstractDatastore
    * @param configuration The configuration
    * @param classes The persistent classes
    */
-  public HibernateDatastore(PropertyResolver configuration, Class... classes) {
+  public HibernateDatastore(PropertyResolver configuration, Class<?>... 
classes) {
     this(configuration, new HibernateConnectionSourceFactory(classes));
   }
 
@@ -460,7 +463,7 @@ public class HibernateDatastore extends AbstractDatastore
    *
    * @param classes The classes
    */
-  public HibernateDatastore(Map<String, Object> configuration, Class... 
classes) {
+  public HibernateDatastore(Map<String, Object> configuration, Class<?>... 
classes) {
     this(
         DatastoreUtils.createPropertyResolver(configuration),
         new HibernateConnectionSourceFactory(classes));
@@ -482,7 +485,7 @@ public class HibernateDatastore extends AbstractDatastore
    *
    * @param classes The classes
    */
-  public HibernateDatastore(Class... classes) {
+  public HibernateDatastore(Class<?>... classes) {
     this(
         DatastoreUtils.createPropertyResolver(
             Collections.singletonMap(Settings.SETTING_DB_CREATE, 
"create-drop")),
@@ -611,7 +614,7 @@ public class HibernateDatastore extends AbstractDatastore
   }
 
   @Override
-  public void setMessageSource(MessageSource messageSource) {
+  public void setMessageSource(@Nullable MessageSource messageSource) {
     HibernateMappingContext mappingContext = getMappingContext();
     ValidatorRegistry validatorRegistry = 
createValidatorRegistry(messageSource);
     configureValidatorRegistry(mappingContext, validatorRegistry, 
messageSource);
@@ -696,7 +699,7 @@ public class HibernateDatastore extends AbstractDatastore
     return new HibernateSession(this, sessionFactory);
   }
 
-  public void setApplicationContext(ApplicationContext applicationContext) 
throws BeansException {
+  public void setApplicationContext(@Nullable ApplicationContext 
applicationContext) throws BeansException {
     if (applicationContext instanceof ConfigurableApplicationContext) {
       super.setApplicationContext(applicationContext);
 
@@ -803,6 +806,7 @@ public class HibernateDatastore extends AbstractDatastore
     if (dataSource instanceof TransactionAwareDataSourceProxy) {
       dataSource = ((TransactionAwareDataSourceProxy) 
dataSource).getTargetDataSource();
     }
+    if (dataSource == null) return;
     Object existing = 
TransactionSynchronizationManager.getResource(dataSource);
     if (existing instanceof ConnectionHolder connectionHolder) {
         Connection connection = connectionHolder.getConnection();
@@ -884,19 +888,22 @@ public class HibernateDatastore extends AbstractDatastore
         new DefaultConnectionSource<>(schemaName, dataSource, 
tenantSettings.getDataSource());
     ConnectionSource<SessionFactory, HibernateConnectionSourceSettings> 
connectionSource =
         factory.create(schemaName, dataSourceConnectionSource, tenantSettings);
+    HibernateDatastore childDatastore = getChildDatastore(connectionSource);
+    datastoresByConnectionSource.put(connectionSource.getName(), 
childDatastore);
+  }
+
+  private @NonNull HibernateDatastore 
getChildDatastore(ConnectionSource<SessionFactory, 
HibernateConnectionSourceSettings> connectionSource) {
     SingletonConnectionSources<SessionFactory, 
HibernateConnectionSourceSettings>
         singletonConnectionSources =
             new SingletonConnectionSources<>(
-                connectionSource, connectionSources.getBaseConfiguration());
-    HibernateDatastore childDatastore =
-        new HibernateDatastore(
-            singletonConnectionSources, (HibernateMappingContext) 
mappingContext, eventPublisher) {
-          @Override
-          protected HibernateGormEnhancer initialize() {
-            return null;
-          }
-        };
-    datastoresByConnectionSource.put(connectionSource.getName(), 
childDatastore);
+                    connectionSource, 
connectionSources.getBaseConfiguration());
+      return new HibernateDatastore(
+          singletonConnectionSources, (HibernateMappingContext) 
HibernateDatastore.this.mappingContext, HibernateDatastore.this.eventPublisher) 
{
+        @Override
+        protected HibernateGormEnhancer initialize() {
+          return null;
+        }
+      };
   }
 
   private Metadata getMetadataInternal() {
@@ -905,8 +912,12 @@ public class HibernateDatastore extends AbstractDatastore
         ((SessionFactoryImplementor) sessionFactory)
             .getServiceRegistry()
             .getParentServiceRegistry();
-    Iterable<Integrator> integrators =
-        
bootstrapServiceRegistry.getService(IntegratorService.class).getIntegrators();
+    if (bootstrapServiceRegistry == null) return null;
+    Iterable<Integrator> integrators;
+    IntegratorService integratorService =
+        bootstrapServiceRegistry.getService(IntegratorService.class);
+    if (integratorService == null) return null;
+    integrators = integratorService.getIntegrators();
     for (Integrator integrator : integrators) {
       if (integrator instanceof MetadataIntegrator) {
         metadata = ((MetadataIntegrator) integrator).getMetadata();
@@ -916,7 +927,7 @@ public class HibernateDatastore extends AbstractDatastore
   }
 
   private static HibernateConnectionSourceFactory 
createConnectionFactoryForDataSource(
-      final DataSource dataSource, Class... classes) {
+      final DataSource dataSource, Class<?>... classes) {
     HibernateConnectionSourceFactory hibernateConnectionSourceFactory =
         new HibernateConnectionSourceFactory(classes);
     hibernateConnectionSourceFactory.setDataSourceConnectionSourceFactory(
@@ -975,7 +986,7 @@ public class HibernateDatastore extends AbstractDatastore
       return ((AllTenantsResolver) tenantResolver).resolveTenantIds();
     } else if (this.multiTenantMode == 
MultiTenancySettings.MultiTenancyMode.DATABASE) {
       List<Serializable> tenantIds = new ArrayList<>();
-      for (ConnectionSource connectionSource : 
this.connectionSources.getAllConnectionSources()) {
+      for (ConnectionSource<?,?> connectionSource : 
this.connectionSources.getAllConnectionSources()) {
         if (!ConnectionSource.DEFAULT.equals(connectionSource.getName())) {
           tenantIds.add(connectionSource.getName());
         }
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/connections/HibernateConnectionSourceFactory.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/connections/HibernateConnectionSourceFactory.java
index bf69e27f29..854acb3943 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/connections/HibernateConnectionSourceFactory.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/connections/HibernateConnectionSourceFactory.java
@@ -79,17 +79,17 @@ public class HibernateConnectionSourceFactory
       new CachedDataSourceConnectionSourceFactory();
 
   protected HibernateMappingContext mappingContext;
-  protected Class[] persistentClasses = new Class[0];
+  protected Class<?>[] persistentClasses = new Class<?>[0];
   private ApplicationContext applicationContext;
   protected HibernateEventListeners hibernateEventListeners;
   protected Interceptor interceptor;
   protected MessageSource messageSource = new StaticMessageSource();
 
-  public HibernateConnectionSourceFactory(Class... classes) {
+  public HibernateConnectionSourceFactory(Class<?>... classes) {
     this.persistentClasses = classes;
   }
 
-  public Class[] getPersistentClasses() {
+  public Class<?>[] getPersistentClasses() {
     return persistentClasses;
   }
 
diff --git 
a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/core/connections/ConnectionSourcesInitializer.groovy
 
b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/core/connections/ConnectionSourcesInitializer.groovy
index 64df65c83f..510069283b 100644
--- 
a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/core/connections/ConnectionSourcesInitializer.groovy
+++ 
b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/core/connections/ConnectionSourcesInitializer.groovy
@@ -41,16 +41,16 @@ class ConnectionSourcesInitializer {
      * @param configuration The configuration
      * @return The {@link ConnectionSources}
      */
-    static <T,S extends ConnectionSourceSettings> ConnectionSources 
create(ConnectionSourceFactory<T, S> connectionSourceFactory, PropertyResolver 
configuration) {
+    static <T,S extends ConnectionSourceSettings> ConnectionSources<T, S> 
create(ConnectionSourceFactory<T, S> connectionSourceFactory, PropertyResolver 
configuration) {
         ConnectionSource defaultConnectionSource = 
connectionSourceFactory.create(ConnectionSource.DEFAULT, configuration)
         Class<ConnectionSources> connectionSourcesClass = 
defaultConnectionSource.getSettings().getConnectionSourcesClass()
 
         if (connectionSourcesClass == null) {
-            return new InMemoryConnectionSources(defaultConnectionSource, 
connectionSourceFactory, configuration)
+            return (ConnectionSources<T, S>) new 
InMemoryConnectionSources(defaultConnectionSource, connectionSourceFactory, 
configuration)
         }
         else {
             try {
-                return 
connectionSourcesClass.newInstance(defaultConnectionSource, 
connectionSourceFactory, configuration)
+                return (ConnectionSources<T, S>) 
connectionSourcesClass.newInstance(defaultConnectionSource, 
connectionSourceFactory, configuration)
             } catch (Throwable e) {
                 throw new ConfigurationException("Cannot instantiate custom 
ConnectionSources implementation: $e.message", e)
             }

Reply via email to