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) }
