From 71a335dbe6cadecd06fb3d655f1dea91da4b4fcb Mon Sep 17 00:00:00 2001 From: Sanne Grinovero Date: Thu, 18 May 2023 12:47:49 +0100 Subject: [PATCH] HHH-16630 Refactor code to avoid frequent lookup of Service MutationExecutorService --- .../java/org/hibernate/internal/FastSessionServices.java | 8 ++++++++ .../persister/collection/OneToManyPersister.java | 4 ++-- .../mutation/DeleteRowsCoordinatorStandard.java | 4 ++-- .../mutation/DeleteRowsCoordinatorTablePerSubclass.java | 4 ++-- .../mutation/InsertRowsCoordinatorStandard.java | 4 ++-- .../mutation/InsertRowsCoordinatorTablePerSubclass.java | 4 ++-- .../collection/mutation/RemoveCoordinatorStandard.java | 4 ++-- .../mutation/RemoveCoordinatorTablePerSubclass.java | 4 ++-- .../mutation/UpdateRowsCoordinatorOneToMany.java | 8 ++++---- .../mutation/UpdateRowsCoordinatorStandard.java | 4 ++-- .../mutation/UpdateRowsCoordinatorTablePerSubclass.java | 8 ++++---- .../entity/mutation/UpdateCoordinatorStandard.java | 8 ++++---- 12 files changed, 36 insertions(+), 28 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/internal/FastSessionServices.java b/hibernate-core/src/main/java/org/hibernate/internal/FastSessionServices.java index e4f223aecf..03ea9101a1 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/FastSessionServices.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/FastSessionServices.java @@ -21,6 +21,7 @@ import org.hibernate.dialect.Dialect; import org.hibernate.engine.jdbc.batch.spi.BatchBuilder; import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider; import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider; +import org.hibernate.engine.jdbc.mutation.spi.MutationExecutorService; import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.event.service.spi.EventListenerGroup; @@ -180,6 +181,7 @@ public final class FastSessionServices { private final ConnectionObserverStatsBridge defaultJdbcObservers; private final FormatMapper jsonFormatMapper; private final FormatMapper xmlFormatMapper; + private final MutationExecutorService mutationExecutorService; FastSessionServices(SessionFactoryImplementor sessionFactory) { Objects.requireNonNull( sessionFactory ); @@ -235,6 +237,7 @@ public final class FastSessionServices { this.defaultJdbcBatchSize = sessionFactoryOptions.getJdbcBatchSize(); this.requiresMultiTenantConnectionProvider = sessionFactory.getSessionFactoryOptions().isMultiTenancyEnabled(); this.parameterMarkerStrategy = serviceRegistry.getService( ParameterMarkerStrategy.class ); + this.mutationExecutorService = serviceRegistry.getService( MutationExecutorService.class ); //Some "hot" services: this.connectionProvider = requiresMultiTenantConnectionProvider @@ -399,4 +402,9 @@ public final class FastSessionServices { } return xmlFormatMapper; } + + public MutationExecutorService getMutationExecutorService() { + return mutationExecutorService; + } + } diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java index aac2db7f90..3dfe45f42e 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java @@ -226,8 +226,8 @@ public class OneToManyPersister extends AbstractCollectionPersister { assert NullnessHelper.areAllNonNull( updateRowOperation, updateRowValues, updateRowRestrictions ); final MutationExecutorService mutationExecutorService = getFactory() - .getServiceRegistry() - .getService( MutationExecutorService.class ); + .getFastSessionServices() + .getMutationExecutorService(); final MutationExecutor mutationExecutor = mutationExecutorService.createExecutor( () -> new BasicBatchKey( getNavigableRole() + "#INDEX" ), new MutationOperationGroupSingle( MutationType.UPDATE, this, updateRowOperation ), diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorStandard.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorStandard.java index ba798a8a61..100743c57d 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorStandard.java @@ -68,8 +68,8 @@ public class DeleteRowsCoordinatorStandard implements DeleteRowsCoordinator { final MutationExecutorService mutationExecutorService = session .getFactory() - .getServiceRegistry() - .getService( MutationExecutorService.class ); + .getFastSessionServices() + .getMutationExecutorService(); final MutationExecutor mutationExecutor = mutationExecutorService.createExecutor( () -> batchKey, operationGroup, diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorTablePerSubclass.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorTablePerSubclass.java index a363a3b7d0..2f889cadef 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorTablePerSubclass.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorTablePerSubclass.java @@ -65,8 +65,8 @@ public class DeleteRowsCoordinatorTablePerSubclass implements DeleteRowsCoordina final MutationExecutorService mutationExecutorService = session .getFactory() - .getServiceRegistry() - .getService( MutationExecutorService.class ); + .getFastSessionServices() + .getMutationExecutorService(); final PluralAttributeMapping pluralAttribute = mutationTarget.getTargetPart(); final CollectionPersister collectionDescriptor = pluralAttribute.getCollectionDescriptor(); diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorStandard.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorStandard.java index 6d79c4e14d..61c11e61c1 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorStandard.java @@ -77,8 +77,8 @@ public class InsertRowsCoordinatorStandard implements InsertRowsCoordinator { final MutationExecutorService mutationExecutorService = session .getFactory() - .getServiceRegistry() - .getService( MutationExecutorService.class ); + .getFastSessionServices() + .getMutationExecutorService(); final MutationExecutor mutationExecutor = mutationExecutorService.createExecutor( () -> batchKey, operationGroup, diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorTablePerSubclass.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorTablePerSubclass.java index b0ad21fc3d..68fbe928e6 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorTablePerSubclass.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorTablePerSubclass.java @@ -72,8 +72,8 @@ public class InsertRowsCoordinatorTablePerSubclass implements InsertRowsCoordina final MutationExecutorService mutationExecutorService = session .getFactory() - .getServiceRegistry() - .getService( MutationExecutorService.class ); + .getFastSessionServices() + .getMutationExecutorService(); final Iterator entries = collection.entries( collectionDescriptor ); collection.preInsert( collectionDescriptor ); diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorStandard.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorStandard.java index 5d331f019d..b3c64ae466 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorStandard.java @@ -86,8 +86,8 @@ public class RemoveCoordinatorStandard implements RemoveCoordinator { final MutationExecutorService mutationExecutorService = session .getFactory() - .getServiceRegistry() - .getService( MutationExecutorService.class ); + .getFastSessionServices() + .getMutationExecutorService(); final MutationExecutor mutationExecutor = mutationExecutorService.createExecutor( () -> batchKey, operationGroup, diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorTablePerSubclass.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorTablePerSubclass.java index 04ffe21543..8c85af8366 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorTablePerSubclass.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorTablePerSubclass.java @@ -78,8 +78,8 @@ public class RemoveCoordinatorTablePerSubclass implements RemoveCoordinator { final MutationExecutorService mutationExecutorService = session .getFactory() - .getServiceRegistry() - .getService( MutationExecutorService.class ); + .getFastSessionServices() + .getMutationExecutorService(); final ForeignKeyDescriptor fkDescriptor = mutationTarget.getTargetPart().getKeyDescriptor(); for ( MutationOperationGroupSingle operationGroup : operationGroups ) { diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/UpdateRowsCoordinatorOneToMany.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/UpdateRowsCoordinatorOneToMany.java index 8a046a9b97..e3b9d05686 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/UpdateRowsCoordinatorOneToMany.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/UpdateRowsCoordinatorOneToMany.java @@ -63,8 +63,8 @@ public class UpdateRowsCoordinatorOneToMany extends AbstractUpdateRowsCoordinato final MutationOperationGroupSingle operationGroup = resolveDeleteGroup(); final MutationExecutorService mutationExecutorService = session .getFactory() - .getServiceRegistry() - .getService( MutationExecutorService.class ); + .getFastSessionServices() + .getMutationExecutorService(); final MutationExecutor mutationExecutor = mutationExecutorService.createExecutor( () -> new BasicBatchKey( getMutationTarget().getRolePath() + "#UPDATE-DELETE" ), operationGroup, @@ -124,8 +124,8 @@ public class UpdateRowsCoordinatorOneToMany extends AbstractUpdateRowsCoordinato final MutationOperationGroupSingle operationGroup = resolveInsertGroup(); final MutationExecutorService mutationExecutorService = session .getFactory() - .getServiceRegistry() - .getService( MutationExecutorService.class ); + .getFastSessionServices() + .getMutationExecutorService(); final MutationExecutor mutationExecutor = mutationExecutorService.createExecutor( () -> new BasicBatchKey( getMutationTarget().getRolePath() + "#UPDATE-INSERT" ), operationGroup, diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/UpdateRowsCoordinatorStandard.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/UpdateRowsCoordinatorStandard.java index c489e74e9e..33292a2e3f 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/UpdateRowsCoordinatorStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/UpdateRowsCoordinatorStandard.java @@ -50,8 +50,8 @@ public class UpdateRowsCoordinatorStandard extends AbstractUpdateRowsCoordinator final MutationExecutorService mutationExecutorService = session .getFactory() - .getServiceRegistry() - .getService( MutationExecutorService.class ); + .getFastSessionServices() + .getMutationExecutorService(); final MutationExecutor mutationExecutor = mutationExecutorService.createExecutor( () -> new BasicBatchKey( getMutationTarget().getRolePath() + "#UPDATE" ), operationGroup, diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/UpdateRowsCoordinatorTablePerSubclass.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/UpdateRowsCoordinatorTablePerSubclass.java index 09f1d2fdf6..e83b209f24 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/UpdateRowsCoordinatorTablePerSubclass.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/UpdateRowsCoordinatorTablePerSubclass.java @@ -66,8 +66,8 @@ public class UpdateRowsCoordinatorTablePerSubclass extends AbstractUpdateRowsCoo final MutationExecutorService mutationExecutorService = session .getFactory() - .getServiceRegistry() - .getService( MutationExecutorService.class ); + .getFastSessionServices() + .getMutationExecutorService(); final MutationExecutor[] executors = new MutationExecutor[deleteSubclassEntries.length]; try { @@ -159,8 +159,8 @@ public class UpdateRowsCoordinatorTablePerSubclass extends AbstractUpdateRowsCoo final MutationExecutorService mutationExecutorService = session .getFactory() - .getServiceRegistry() - .getService( MutationExecutorService.class ); + .getFastSessionServices() + .getMutationExecutorService(); final MutationExecutor[] executors = new MutationExecutor[insertSubclassEntries.length]; try { diff --git a/hibernate-core/src/main/java/org/hibernate/persister/entity/mutation/UpdateCoordinatorStandard.java b/hibernate-core/src/main/java/org/hibernate/persister/entity/mutation/UpdateCoordinatorStandard.java index 07053e9bd9..4cd4f2a7ec 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/entity/mutation/UpdateCoordinatorStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/entity/mutation/UpdateCoordinatorStandard.java @@ -976,15 +976,15 @@ public class UpdateCoordinatorStandard extends AbstractMutationCoordinator imple private MutationExecutor executor(SharedSessionContractImplementor session, MutationOperationGroup group, boolean dynamicUpdate) { return session.getSessionFactory() - .getServiceRegistry() - .getService( MutationExecutorService.class ) + .getFastSessionServices() + .getMutationExecutorService() .createExecutor( resolveBatchKeyAccess( dynamicUpdate, session ), group, session ); } private MutationExecutor updateVersionExecutor(SharedSessionContractImplementor session, MutationOperationGroup group, boolean dynamicUpdate) { return session.getSessionFactory() - .getServiceRegistry() - .getService( MutationExecutorService.class ) + .getFastSessionServices() + .getMutationExecutorService() .createExecutor( resolveUpdateVersionBatchKeyAccess( dynamicUpdate, session ), group, session ); }