Skip to content

Commit 38bb804

Browse files
committed
do more caching of commonly-used services for performance and convenience
expose them via BootstrapContext and SessionFactoryImplementor
1 parent 6217e7b commit 38bb804

File tree

74 files changed

+402
-315
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+402
-315
lines changed

hibernate-core/src/main/java/org/hibernate/boot/internal/BootstrapContextImpl.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.hibernate.query.sqm.function.SqmFunctionDescriptor;
3636
import org.hibernate.query.sqm.function.SqmFunctionRegistry;
3737
import org.hibernate.resource.beans.spi.BeanInstanceProducer;
38+
import org.hibernate.resource.beans.spi.ManagedBeanRegistry;
3839
import org.hibernate.type.BasicType;
3940
import org.hibernate.type.spi.TypeConfiguration;
4041

@@ -53,8 +54,10 @@ public class BootstrapContextImpl implements BootstrapContext {
5354
private final SqmFunctionRegistry sqmFunctionRegistry;
5455
private final MutableJpaCompliance jpaCompliance;
5556

57+
private final ClassLoaderService classLoaderService;
5658
private final ClassLoaderAccessImpl classLoaderAccess;
5759
private final BeanInstanceProducer beanInstanceProducer;
60+
private final ManagedBeanRegistry managedBeanRegistry;
5861

5962
private boolean isJpaBootstrap;
6063

@@ -72,6 +75,7 @@ public class BootstrapContextImpl implements BootstrapContext {
7275
private HashMap<Class<?>, ConverterDescriptor> attributeConverterDescriptorMap;
7376
private ArrayList<CacheRegionDefinition> cacheRegionDefinitions;
7477
private final ManagedTypeRepresentationResolver representationStrategySelector;
78+
private ConfigurationService configurationService;
7579

7680
public BootstrapContextImpl(
7781
StandardServiceRegistry serviceRegistry,
@@ -80,7 +84,8 @@ public BootstrapContextImpl(
8084
this.classmateContext = new ClassmateContext();
8185
this.metadataBuildingOptions = metadataBuildingOptions;
8286

83-
this.classLoaderAccess = new ClassLoaderAccessImpl( serviceRegistry.getService( ClassLoaderService.class ) );
87+
this.classLoaderService = serviceRegistry.getService( ClassLoaderService.class );
88+
this.classLoaderAccess = new ClassLoaderAccessImpl( classLoaderService );
8489

8590
final StrategySelector strategySelector = serviceRegistry.requireService( StrategySelector.class );
8691
final ConfigurationService configService = serviceRegistry.requireService( ConfigurationService.class );
@@ -103,6 +108,9 @@ public BootstrapContextImpl(
103108
this.typeConfiguration = new TypeConfiguration();
104109
this.beanInstanceProducer = new TypeBeanInstanceProducer( configService, serviceRegistry );
105110
this.sqmFunctionRegistry = new SqmFunctionRegistry();
111+
112+
this.managedBeanRegistry = serviceRegistry.requireService( ManagedBeanRegistry.class );
113+
this.configurationService = serviceRegistry.requireService( ConfigurationService.class );
106114
}
107115

108116
@Override
@@ -135,6 +143,21 @@ public MetadataBuildingOptions getMetadataBuildingOptions() {
135143
return metadataBuildingOptions;
136144
}
137145

146+
@Override
147+
public ClassLoaderService getClassLoaderService() {
148+
return classLoaderService;
149+
}
150+
151+
@Override
152+
public ManagedBeanRegistry getManagedBeanRegistry() {
153+
return managedBeanRegistry;
154+
}
155+
156+
@Override
157+
public ConfigurationService getConfigurationService() {
158+
return configurationService;
159+
}
160+
138161
@Override
139162
public boolean isJpaBootstrap() {
140163
return isJpaBootstrap;

hibernate-core/src/main/java/org/hibernate/boot/internal/ClassLoaderAccessImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,9 @@ public Class<?> classForName(String name) {
8282
private boolean isSafeClass(String name) {
8383
// classes in any of these packages are safe to load through the "live" ClassLoader
8484
return name.startsWith( "java." )
85-
|| name.startsWith( "javax." )
86-
|| name.startsWith( "jakarta." )
87-
|| name.startsWith( "org.hibernate." );
85+
|| name.startsWith( "javax." )
86+
|| name.startsWith( "jakarta." )
87+
|| name.startsWith( "org.hibernate." );
8888

8989
}
9090

hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ public InFlightMetadataCollectorImpl(BootstrapContext bootstrapContext, Metadata
228228
}
229229

230230
private static SourceModelBuildingContext createModelBuildingContext(BootstrapContext bootstrapContext) {
231-
final ClassLoaderService classLoaderService = bootstrapContext.getServiceRegistry().getService( ClassLoaderService.class );
231+
final ClassLoaderService classLoaderService = bootstrapContext.getClassLoaderService();
232232
final ClassLoaderServiceLoading classLoading = new ClassLoaderServiceLoading( classLoaderService );
233233

234234
final ModelsConfiguration modelsConfiguration = new ModelsConfiguration();

hibernate-core/src/main/java/org/hibernate/boot/internal/MetadataImpl.java

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -165,24 +165,10 @@ public SqmFunctionRegistry getFunctionRegistry() {
165165

166166
@Override
167167
public SessionFactoryBuilder getSessionFactoryBuilder() {
168-
final SessionFactoryBuilderImplementor defaultBuilder =
169-
metadataBuildingOptions.getServiceRegistry()
170-
.requireService( SessionFactoryBuilderService.class )
171-
.createSessionFactoryBuilder( this, bootstrapContext );
172-
final SessionFactoryBuilder builder = discoverBuilder( defaultBuilder );
173-
return builder != null ? builder : defaultBuilder;
174-
175-
}
176-
177-
private SessionFactoryBuilder discoverBuilder(SessionFactoryBuilderImplementor defaultBuilder) {
178-
final java.util.Collection<SessionFactoryBuilderFactory> discoveredBuilderFactories =
179-
metadataBuildingOptions.getServiceRegistry().requireService( ClassLoaderService.class )
180-
.loadJavaServices( SessionFactoryBuilderFactory.class );
181-
168+
final SessionFactoryBuilderImplementor defaultBuilder = getFactoryBuilder();
182169
SessionFactoryBuilder builder = null;
183170
List<String> activeFactoryNames = null;
184-
185-
for ( SessionFactoryBuilderFactory discoveredBuilderFactory : discoveredBuilderFactories ) {
171+
for ( SessionFactoryBuilderFactory discoveredBuilderFactory : getSessionFactoryBuilderFactories() ) {
186172
final SessionFactoryBuilder returnedBuilder =
187173
discoveredBuilderFactory.getSessionFactoryBuilder( this, defaultBuilder );
188174
if ( returnedBuilder != null ) {
@@ -200,7 +186,22 @@ private SessionFactoryBuilder discoverBuilder(SessionFactoryBuilderImplementor d
200186
join( ", ", activeFactoryNames )
201187
);
202188
}
203-
return builder;
189+
190+
return builder == null ? defaultBuilder : builder;
191+
}
192+
193+
private Iterable<SessionFactoryBuilderFactory> getSessionFactoryBuilderFactories() {
194+
return getClassLoaderService().loadJavaServices( SessionFactoryBuilderFactory.class );
195+
}
196+
197+
private SessionFactoryBuilderImplementor getFactoryBuilder() {
198+
return metadataBuildingOptions.getServiceRegistry()
199+
.requireService( SessionFactoryBuilderService.class )
200+
.createSessionFactoryBuilder( this, bootstrapContext );
201+
}
202+
203+
private ClassLoaderService getClassLoaderService() {
204+
return metadataBuildingOptions.getServiceRegistry().requireService( ClassLoaderService.class );
204205
}
205206

206207
@Override
@@ -490,13 +491,10 @@ public Set<MappedSuperclass> getMappedSuperclassMappingsCopy() {
490491
public void initSessionFactory(SessionFactoryImplementor sessionFactory) {
491492
final ServiceRegistryImplementor sessionFactoryServiceRegistry = sessionFactory.getServiceRegistry();
492493
assert sessionFactoryServiceRegistry != null;
494+
final ConfigurationService configurationService = bootstrapContext.getConfigurationService();
495+
final ClassLoaderService classLoaderService = bootstrapContext.getClassLoaderService();
493496
final EventListenerRegistry eventListenerRegistry =
494497
sessionFactoryServiceRegistry.requireService( EventListenerRegistry.class );
495-
final ConfigurationService configurationService =
496-
sessionFactoryServiceRegistry.requireService( ConfigurationService.class );
497-
final ClassLoaderService classLoaderService =
498-
sessionFactoryServiceRegistry.requireService( ClassLoaderService.class );
499-
500498
for ( Map.Entry<String,Object> entry : configurationService.getSettings().entrySet() ) {
501499
final String propertyName = entry.getKey();
502500
if ( propertyName.startsWith( EVENT_LISTENER_PREFIX ) ) {

hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationBinder.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,7 @@ private static void bindTypeDescriptorRegistrations(
253253
AnnotationTarget annotatedElement,
254254
MetadataBuildingContext context) {
255255
final ManagedBeanRegistry managedBeanRegistry =
256-
context.getBootstrapContext().getServiceRegistry()
257-
.getService( ManagedBeanRegistry.class );
256+
context.getBootstrapContext().getManagedBeanRegistry();
258257

259258
final SourceModelBuildingContext sourceModelContext = sourceContext( context );
260259

hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationHelper.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.hibernate.metamodel.mapping.JdbcMapping;
1616
import org.hibernate.resource.beans.internal.FallbackBeanInstanceProducer;
1717
import org.hibernate.resource.beans.spi.ManagedBean;
18-
import org.hibernate.resource.beans.spi.ManagedBeanRegistry;
1918
import org.hibernate.type.BasicType;
2019
import org.hibernate.type.CustomType;
2120
import org.hibernate.type.descriptor.converter.internal.JpaAttributeConverterImpl;
@@ -49,15 +48,13 @@ public static JdbcMapping resolveUserType(Class<UserType<?>> userTypeClass, Meta
4948
final BootstrapContext bootstrapContext = context.getBootstrapContext();
5049
final UserType<?> userType = !context.getBuildingOptions().isAllowExtensionsInCdi()
5150
? FallbackBeanInstanceProducer.INSTANCE.produceBeanInstance( userTypeClass )
52-
: bootstrapContext.getServiceRegistry().requireService( ManagedBeanRegistry.class ).getBean( userTypeClass ).getBeanInstance();
51+
: bootstrapContext.getManagedBeanRegistry().getBean( userTypeClass ).getBeanInstance();
5352
return new CustomType<>( userType, bootstrapContext.getTypeConfiguration() );
5453
}
5554

5655
public static JdbcMapping resolveAttributeConverter(Class<AttributeConverter<?, ?>> type, MetadataBuildingContext context) {
5756
final BootstrapContext bootstrapContext = context.getBootstrapContext();
58-
final ManagedBean<AttributeConverter<?, ?>> bean = bootstrapContext.getServiceRegistry()
59-
.requireService( ManagedBeanRegistry.class )
60-
.getBean( type );
57+
final ManagedBean<AttributeConverter<?, ?>> bean = bootstrapContext.getManagedBeanRegistry().getBean( type );
6158

6259
final TypeConfiguration typeConfiguration = bootstrapContext.getTypeConfiguration();
6360
final JavaTypeRegistry jtdRegistry = typeConfiguration.getJavaTypeRegistry();
@@ -155,8 +152,7 @@ else if ( !context.getBuildingOptions().isAllowExtensionsInCdi() ) {
155152
return FallbackBeanInstanceProducer.INSTANCE.produceBeanInstance( javaTypeClass );
156153
}
157154
else {
158-
return context.getBootstrapContext().getServiceRegistry()
159-
.requireService( ManagedBeanRegistry.class )
155+
return context.getBootstrapContext().getManagedBeanRegistry()
160156
.getBean( javaTypeClass )
161157
.getBeanInstance();
162158
}

hibernate-core/src/main/java/org/hibernate/boot/model/internal/BasicValueBinder.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -504,8 +504,7 @@ private boolean useDeferredBeanContainerAccess() {
504504
}
505505

506506
private ManagedBeanRegistry getManagedBeanRegistry() {
507-
return buildingContext.getBootstrapContext().getServiceRegistry()
508-
.requireService(ManagedBeanRegistry.class);
507+
return buildingContext.getBootstrapContext().getManagedBeanRegistry();
509508
}
510509

511510
private void prepareMapKey(

hibernate-core/src/main/java/org/hibernate/boot/model/internal/CollectionBinder.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -877,7 +877,8 @@ private static CollectionBinder createBinderFromTypeRegistration(
877877
property.getDeclaringType().getName() + "#" + property.getName(),
878878
typeRegistration.getImplementation(),
879879
typeRegistration.getParameters(),
880-
context.getMetadataCollector()
880+
context.getBootstrapContext(),
881+
context.getMetadataCollector().getMetadataBuildingOptions().isAllowExtensionsInCdi()
881882
),
882883
classification,
883884
context
@@ -912,7 +913,8 @@ private static ManagedBean<? extends UserCollectionType> resolveCustomType(
912913
property.getDeclaringType().getName() + "." + property.getName(),
913914
typeAnnotation.type(),
914915
PropertiesHelper.map( extractParameters( typeAnnotation ) ),
915-
context.getMetadataCollector()
916+
context.getBootstrapContext(),
917+
context.getMetadataCollector().getMetadataBuildingOptions().isAllowExtensionsInCdi()
916918
);
917919
}
918920

hibernate-core/src/main/java/org/hibernate/boot/model/internal/EmbeddableBinder.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
import org.hibernate.property.access.internal.PropertyAccessStrategyGetterImpl;
5252
import org.hibernate.property.access.spi.PropertyAccessStrategy;
5353
import org.hibernate.resource.beans.internal.FallbackBeanInstanceProducer;
54-
import org.hibernate.resource.beans.spi.ManagedBeanRegistry;
5554
import org.hibernate.type.BasicType;
5655
import org.hibernate.usertype.CompositeUserType;
5756

@@ -598,9 +597,7 @@ private static CompositeUserType<?> compositeUserType(
598597
FallbackBeanInstanceProducer.INSTANCE.produceBeanInstance( compositeUserTypeClass );
599598
}
600599

601-
return context.getBootstrapContext()
602-
.getServiceRegistry()
603-
.requireService( ManagedBeanRegistry.class )
600+
return context.getBootstrapContext().getManagedBeanRegistry()
604601
.getBean( compositeUserTypeClass )
605602
.getBeanInstance();
606603
}

hibernate-core/src/main/java/org/hibernate/boot/model/internal/FilterDefBinder.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.hibernate.models.spi.AnnotationTarget;
2222
import org.hibernate.models.spi.SourceModelBuildingContext;
2323
import org.hibernate.resource.beans.spi.ManagedBean;
24-
import org.hibernate.resource.beans.spi.ManagedBeanRegistry;
2524
import org.hibernate.type.descriptor.java.JavaType;
2625
import org.hibernate.usertype.UserType;
2726

@@ -106,9 +105,8 @@ public static void bindFilterDef(FilterDef filterDef, MetadataBuildingContext co
106105
private static ManagedBean<? extends Supplier<?>> resolveParamResolver(Class<? extends Supplier> resolverClass, MetadataBuildingContext context) {
107106
assert resolverClass != Supplier.class;
108107
final BootstrapContext bootstrapContext = context.getBootstrapContext();
109-
return (ManagedBean<? extends Supplier<?>>) bootstrapContext.getServiceRegistry()
110-
.requireService(ManagedBeanRegistry.class)
111-
.getBean(resolverClass, bootstrapContext.getCustomTypeProducer());
108+
return (ManagedBean<? extends Supplier<?>>) bootstrapContext.getManagedBeanRegistry()
109+
.getBean( resolverClass, bootstrapContext.getCustomTypeProducer() );
112110
}
113111

114112
@SuppressWarnings("unchecked")

0 commit comments

Comments
 (0)