HHH-16069 - Skip CDI for Hibernate extensions by default

This commit is contained in:
Steve Ebersole 2023-01-25 23:34:08 -06:00
parent a742f5e988
commit 375f6b5f14
2 changed files with 26 additions and 5 deletions

View File

@ -56,12 +56,13 @@ public final class ComponentMetadataGenerator extends AbstractMetadataGenerator
if ( getMetadataBuildingContext().getBuildingOptions().disallowExtensionsInCdi() ) { if ( getMetadataBuildingContext().getBuildingOptions().disallowExtensionsInCdi() ) {
instantiator = FallbackBeanInstanceProducer.INSTANCE.produceBeanInstance( propComponent.getCustomInstantiator() ); instantiator = FallbackBeanInstanceProducer.INSTANCE.produceBeanInstance( propComponent.getCustomInstantiator() );
} }
else else {
instantiator = getMetadataBuildingContext().getBootstrapContext() instantiator = getMetadataBuildingContext().getBootstrapContext()
.getServiceRegistry() .getServiceRegistry()
.getService( ManagedBeanRegistry.class ) .getService( ManagedBeanRegistry.class )
.getBean( propComponent.getCustomInstantiator() ) .getBean( propComponent.getCustomInstantiator() )
.getBeanInstance(); .getBeanInstance();
}
} }
else if ( propComponent.getTypeName() != null ) { else if ( propComponent.getTypeName() != null ) {
final Class<CompositeUserType<?>> userTypeClass = getMetadataBuildingContext().getBootstrapContext() final Class<CompositeUserType<?>> userTypeClass = getMetadataBuildingContext().getBootstrapContext()

View File

@ -144,6 +144,26 @@ The minimum supported dialect versions are as follows:
|2.6.1 |2.6.1
|=== |===
[[cdi]]
== Changes to CDI handling
When CDI is available and configured, Hibernate can use the CDI `BeanManager` to resolve various
bean references. JPA explicitly defines support for this for both attribute-converters and
entity-listeners.
Hibernate also has the ability to resolve some of its extension points using the CDI `BeanManager`.
Version 6.2 adds a new boolean `hibernate.cdi.extensions` setting to control this:
true:: indicates to use the CDI `BeanManager` to resolve these extensions
false:: (the default) indicates to not use the CDI `BeanManager` to resolve these extensions
The previous behavior was to always load the extensions from CDI if it was available. However,
this can sometimes lead to timing issues with the `BeanManager` not being ready for use when we need
those extension beans. Starting with 6.2, these extensions will only be resolved from the CDI
`BeanManager` is `hibernate.cdi.extensions` is set to true.
[[enhancement]] [[enhancement]]
== Change enhancement defaults and deprecation == Change enhancement defaults and deprecation