From be2999d05419732220e814e0b5cd43b35ca5d6a8 Mon Sep 17 00:00:00 2001 From: Sanne Grinovero Date: Tue, 8 Nov 2022 14:51:30 +0000 Subject: [PATCH] HHH-15693 Introduce a fast-path access for ClassLoaderService being retrieved from ServiceRegistry --- .../service/internal/AbstractServiceRegistryImpl.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hibernate-core/src/main/java/org/hibernate/service/internal/AbstractServiceRegistryImpl.java b/hibernate-core/src/main/java/org/hibernate/service/internal/AbstractServiceRegistryImpl.java index 78325c17c3..f30febdf3f 100644 --- a/hibernate-core/src/main/java/org/hibernate/service/internal/AbstractServiceRegistryImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/service/internal/AbstractServiceRegistryImpl.java @@ -17,6 +17,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; import org.hibernate.boot.registry.BootstrapServiceRegistry; +import org.hibernate.boot.registry.classloading.spi.ClassLoaderService; import org.hibernate.cfg.Environment; import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; @@ -184,6 +185,14 @@ public abstract class AbstractServiceRegistryImpl @Override public R getService(Class serviceRole) { + //Fast-path for ClassLoaderService as it's extremely hot during bootstrap + //(and after bootstrap service loading performance is less interesting as it's + //ideally being cached by long term consumers) + if ( ClassLoaderService.class.equals( serviceRole ) ) { + if ( parent != null ) { + return parent.getService( serviceRole ); + } + } // TODO: should an exception be thrown if active == false??? R service = serviceRole.cast( initializedServiceByRole.get( serviceRole ) ); if ( service != null ) {