Skip to content

Commit 3c1b5c7

Browse files
dreab8sebersole
authored andcommitted
HHH-18520 Upgrade to hibernate-models 0.9.0 + HHH-18521 Leverage hibernate-models ModelsConfiguration
1 parent 6e2ed7f commit 3c1b5c7

File tree

15 files changed

+166
-263
lines changed

15 files changed

+166
-263
lines changed

hibernate-core/hibernate-core.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ dependencies {
2828
api jakartaLibs.jta
2929

3030
implementation libs.hibernateModels
31+
implementation libs.hibernateModelsJandex
3132
implementation libs.jandex
3233
implementation libs.classmate
3334
implementation libs.byteBuddy
@@ -65,6 +66,7 @@ dependencies {
6566
}
6667
testImplementation "joda-time:joda-time:2.3"
6768
testImplementation dbLibs.h2
69+
testImplementation libs.hibernateModelsJandex
6870

6971
testRuntimeOnly libs.byteBuddy
7072
testRuntimeOnly testLibs.weld

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@
105105
import org.hibernate.metamodel.CollectionClassification;
106106
import org.hibernate.metamodel.mapping.DiscriminatorType;
107107
import org.hibernate.metamodel.spi.EmbeddableInstantiator;
108-
import org.hibernate.models.internal.SourceModelBuildingContextImpl;
109108
import org.hibernate.models.spi.ClassDetails;
109+
import org.hibernate.models.spi.ModelsConfiguration;
110110
import org.hibernate.models.spi.SourceModelBuildingContext;
111111
import org.hibernate.query.named.NamedObjectRepository;
112112
import org.hibernate.query.sqm.function.SqmFunctionDescriptor;
@@ -228,11 +228,13 @@ public InFlightMetadataCollectorImpl(
228228
private static SourceModelBuildingContext createModelBuildingContext(BootstrapContext bootstrapContext) {
229229
final ClassLoaderService classLoaderService = bootstrapContext.getServiceRegistry().getService( ClassLoaderService.class );
230230
final ClassLoaderServiceLoading classLoading = new ClassLoaderServiceLoading( classLoaderService );
231-
return new SourceModelBuildingContextImpl(
232-
classLoading,
233-
bootstrapContext.getJandexView(),
234-
ModelsHelper::preFillRegistries
235-
);
231+
232+
final ModelsConfiguration modelsConfiguration = new ModelsConfiguration();
233+
modelsConfiguration.setClassLoading(classLoading);
234+
// modelsConfiguration.setExplicitContextProvider( );
235+
modelsConfiguration.configValue( "hibernate.models.jandex.index", bootstrapContext.getJandexView() );
236+
modelsConfiguration.setRegistryPrimer( ModelsHelper::preFillRegistries );
237+
return modelsConfiguration.bootstrap();
236238
}
237239

238240
@Override

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

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,8 @@ public TypeDetails getPropertyType() throws MappingException {
8787
if ( targetAnnotation != null ) {
8888
final String targetName = targetAnnotation.value();
8989
final SourceModelBuildingContext sourceModelBuildingContext = sourceModelContext;
90-
final ClassDetails classDetails = sourceModelBuildingContext.getClassDetailsRegistry().resolveClassDetails(
91-
targetName,
92-
name -> new DynamicClassDetails( targetName, sourceModelBuildingContext )
93-
);
90+
final ClassDetails classDetails = sourceModelBuildingContext.getClassDetailsRegistry()
91+
.resolveClassDetails( targetName );
9492
return new ClassTypeDetailsImpl( classDetails, TypeDetails.Kind.CLASS );
9593
}
9694

@@ -119,10 +117,8 @@ public TypeDetails getClassOrElementType() throws MappingException {
119117
final org.hibernate.boot.internal.Target annotationUsage = propertyMember.getDirectAnnotationUsage( org.hibernate.boot.internal.Target.class );
120118
if ( annotationUsage != null ) {
121119
final String targetName = annotationUsage.value();
122-
final ClassDetails classDetails = sourceModelBuildingContext.getClassDetailsRegistry().resolveClassDetails(
123-
targetName,
124-
name -> new DynamicClassDetails( targetName, sourceModelBuildingContext )
125-
);
120+
final ClassDetails classDetails = sourceModelBuildingContext.getClassDetailsRegistry()
121+
.resolveClassDetails( targetName );
126122
return new ClassTypeDetailsImpl( classDetails, TypeDetails.Kind.CLASS );
127123
}
128124

hibernate-core/src/main/java/org/hibernate/boot/model/process/spi/MetadataBuildingProcess.java

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@
7272
import org.hibernate.engine.config.spi.StandardConverters;
7373
import org.hibernate.engine.jdbc.spi.JdbcServices;
7474
import org.hibernate.mapping.Table;
75-
import org.hibernate.models.internal.jandex.JandexIndexerHelper;
75+
import org.hibernate.models.internal.MutableClassDetailsRegistry;
76+
import org.hibernate.models.jandex.internal.JandexIndexerHelper;
7677
import org.hibernate.models.spi.ClassDetails;
7778
import org.hibernate.models.spi.ClassDetailsRegistry;
7879
import org.hibernate.models.spi.ClassLoading;
@@ -458,7 +459,7 @@ public static DomainModelSource processManagedResources(
458459
xmlProcessingResult.apply( xmlPreProcessingResult.getPersistenceUnitMetadata() );
459460

460461
return new DomainModelSource(
461-
classDetailsRegistry.makeImmutableCopy(),
462+
classDetailsRegistry,
462463
jandexIndex,
463464
allKnownClassNames,
464465
modelCategorizationCollector.getGlobalRegistrations(),
@@ -516,40 +517,6 @@ public static IndexView resolveJandexIndex(
516517

517518
return CompositeIndex.create( suppliedJandexIndex, jandexIndexer.complete() );
518519
}
519-
//
520-
// public static void preFillRegistries(RegistryPrimer.Contributions contributions, SourceModelBuildingContext buildingContext) {
521-
// OrmAnnotationHelper.forEachOrmAnnotation( contributions::registerAnnotation );
522-
//
523-
// final IndexView jandexIndex = buildingContext.getJandexIndex();
524-
// if ( jandexIndex == null ) {
525-
// return;
526-
// }
527-
//
528-
// final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry();
529-
// final AnnotationDescriptorRegistry annotationDescriptorRegistry = buildingContext.getAnnotationDescriptorRegistry();
530-
//
531-
// for ( ClassInfo knownClass : jandexIndex.getKnownClasses() ) {
532-
// final String className = knownClass.name().toString();
533-
//
534-
// if ( knownClass.isAnnotation() ) {
535-
// // it is always safe to load the annotation classes - we will never be enhancing them
536-
// //noinspection rawtypes
537-
// final Class annotationClass = buildingContext
538-
// .getClassLoading()
539-
// .classForName( className );
540-
// //noinspection unchecked
541-
// annotationDescriptorRegistry.resolveDescriptor(
542-
// annotationClass,
543-
// (t) -> JdkBuilders.buildAnnotationDescriptor( annotationClass, buildingContext )
544-
// );
545-
// }
546-
//
547-
// classDetailsRegistry.resolveClassDetails(
548-
// className,
549-
// (name) -> new JandexClassDetails( knownClass, buildingContext )
550-
// );
551-
// }
552-
// }
553520

554521
private static void processAdditionalMappingContributions(
555522
InFlightMetadataCollectorImpl metadataCollector,
@@ -628,6 +595,7 @@ public void contributeManagedClass(ClassDetails classDetails) {
628595
additionalClassDetails.add( classDetails );
629596
metadataCollector.getSourceModelBuildingContext()
630597
.getClassDetailsRegistry()
598+
.as( MutableClassDetailsRegistry.class )
631599
.addClassDetails( classDetails.getName(), classDetails );
632600
}
633601

hibernate-core/src/main/java/org/hibernate/boot/models/categorize/internal/ClassLoaderServiceLoading.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
package org.hibernate.boot.models.categorize.internal;
88

99
import java.net.URL;
10+
import java.util.Collection;
11+
import java.util.HashSet;
12+
import java.util.Iterator;
13+
import java.util.List;
14+
import java.util.ServiceLoader;
15+
import java.util.Set;
1016

1117
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
1218
import org.hibernate.models.spi.ClassLoading;
@@ -37,4 +43,9 @@ public Package packageForName(String name) {
3743
public URL locateResource(String resourceName) {
3844
return classLoaderService.locateResource( resourceName );
3945
}
46+
47+
@Override
48+
public <S> Collection<S> loadJavaServices(Class<S> serviceType) {
49+
return classLoaderService.loadJavaServices( serviceType );
50+
}
4051
}

hibernate-core/src/main/java/org/hibernate/boot/models/categorize/spi/ManagedResourcesProcessor.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
3232
import org.hibernate.boot.spi.BootstrapContext;
3333
import org.hibernate.boot.spi.MetadataBuildingOptions;
34-
import org.hibernate.models.internal.SourceModelBuildingContextImpl;
35-
import org.hibernate.models.internal.jandex.JandexIndexerHelper;
34+
import org.hibernate.models.internal.BasicModelBuildingContextImpl;
35+
import org.hibernate.models.jandex.internal.JandexIndexerHelper;
3636
import org.hibernate.models.spi.AnnotationDescriptorRegistry;
3737
import org.hibernate.models.spi.ClassDetails;
3838
import org.hibernate.models.spi.ClassDetailsRegistry;
@@ -103,9 +103,8 @@ public static CategorizedDomainModel processManagedResources(
103103
// At this point we know all managed class names across all sources.
104104
// Resolve the Jandex Index and build the SourceModelBuildingContext.
105105
final IndexView jandexIndex = resolveJandexIndex( allKnownClassNames, bootstrapContext.getJandexView(), classLoading );
106-
final SourceModelBuildingContextImpl sourceModelBuildingContext = new SourceModelBuildingContextImpl(
106+
final BasicModelBuildingContextImpl sourceModelBuildingContext = new BasicModelBuildingContextImpl(
107107
classLoading,
108-
jandexIndex,
109108
ModelsHelper::preFillRegistries
110109
);
111110

@@ -174,16 +173,11 @@ public static CategorizedDomainModel processManagedResources(
174173
// OUTPUTS:
175174
// - CategorizedDomainModel
176175

177-
final ClassDetailsRegistry classDetailsRegistryImmutable = classDetailsRegistry
178-
.makeImmutableCopy();
179-
180-
final AnnotationDescriptorRegistry annotationDescriptorRegistryImmutable = descriptorRegistry
181-
.makeImmutableCopy();
182176

183177
// Collect the entity hierarchies based on the set of `rootEntities`
184178
final ModelCategorizationContextImpl mappingBuildingContext = new ModelCategorizationContextImpl(
185-
classDetailsRegistryImmutable,
186-
annotationDescriptorRegistryImmutable,
179+
classDetailsRegistry,
180+
descriptorRegistry,
187181
globalRegistrations
188182
);
189183

@@ -212,8 +206,8 @@ public static CategorizedDomainModel processManagedResources(
212206
return modelCategorizationCollector.createResult(
213207
entityHierarchies,
214208
xmlPreProcessingResult.getPersistenceUnitMetadata(),
215-
classDetailsRegistryImmutable,
216-
annotationDescriptorRegistryImmutable
209+
classDetailsRegistry,
210+
descriptorRegistry
217211
);
218212
}
219213

hibernate-core/src/main/java/org/hibernate/boot/models/internal/ModelsHelper.java

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
package org.hibernate.boot.models.internal;
88

99
import org.hibernate.annotations.TenantId;
10-
import org.hibernate.models.internal.jandex.JandexClassDetails;
1110
import org.hibernate.models.internal.jdk.JdkBuilders;
11+
import org.hibernate.models.jandex.spi.JandexModelBuildingContext;
1212
import org.hibernate.models.spi.AnnotationDescriptorRegistry;
1313
import org.hibernate.models.spi.ClassDetailsRegistry;
1414
import org.hibernate.models.spi.RegistryPrimer;
@@ -26,34 +26,33 @@ public static void preFillRegistries(RegistryPrimer.Contributions contributions,
2626

2727
buildingContext.getAnnotationDescriptorRegistry().getDescriptor( TenantId.class );
2828

29-
final IndexView jandexIndex = buildingContext.getJandexIndex();
30-
if ( jandexIndex == null ) {
31-
return;
32-
}
33-
34-
final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry();
35-
final AnnotationDescriptorRegistry annotationDescriptorRegistry = buildingContext.getAnnotationDescriptorRegistry();
36-
37-
for ( ClassInfo knownClass : jandexIndex.getKnownClasses() ) {
38-
final String className = knownClass.name().toString();
39-
40-
if ( knownClass.isAnnotation() ) {
41-
// it is always safe to load the annotation classes - we will never be enhancing them
42-
//noinspection rawtypes
43-
final Class annotationClass = buildingContext
44-
.getClassLoading()
45-
.classForName( className );
46-
//noinspection unchecked
47-
annotationDescriptorRegistry.resolveDescriptor(
48-
annotationClass,
49-
(t) -> JdkBuilders.buildAnnotationDescriptor( annotationClass, buildingContext )
50-
);
29+
if ( buildingContext instanceof JandexModelBuildingContext ) {
30+
final IndexView jandexIndex = buildingContext.as( JandexModelBuildingContext.class ).getJandexIndex();
31+
if ( jandexIndex == null ) {
32+
return;
5133
}
5234

53-
classDetailsRegistry.resolveClassDetails(
54-
className,
55-
(name) -> new JandexClassDetails( knownClass, buildingContext )
56-
);
35+
final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry();
36+
final AnnotationDescriptorRegistry annotationDescriptorRegistry = buildingContext.getAnnotationDescriptorRegistry();
37+
38+
for ( ClassInfo knownClass : jandexIndex.getKnownClasses() ) {
39+
final String className = knownClass.name().toString();
40+
41+
if ( knownClass.isAnnotation() ) {
42+
// it is always safe to load the annotation classes - we will never be enhancing them
43+
//noinspection rawtypes
44+
final Class annotationClass = buildingContext
45+
.getClassLoading()
46+
.classForName( className );
47+
//noinspection unchecked
48+
annotationDescriptorRegistry.resolveDescriptor(
49+
annotationClass,
50+
(t) -> JdkBuilders.buildAnnotationDescriptor( annotationClass, buildingContext )
51+
);
52+
}
53+
54+
classDetailsRegistry.resolveClassDetails( className );
55+
}
5756
}
5857
}
5958
}

hibernate-core/src/main/java/org/hibernate/boot/models/internal/OrmAnnotationHelper.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,20 @@
1515
import java.util.ArrayList;
1616
import java.util.List;
1717
import java.util.Locale;
18-
import java.util.Map;
1918
import java.util.function.Consumer;
2019

2120
import org.hibernate.boot.models.DialectOverrideAnnotations;
2221
import org.hibernate.boot.models.HibernateAnnotations;
2322
import org.hibernate.boot.models.JpaAnnotations;
2423
import org.hibernate.boot.models.XmlAnnotations;
2524
import org.hibernate.models.AnnotationAccessException;
25+
import org.hibernate.models.jandex.spi.JandexModelBuildingContext;
26+
import org.hibernate.models.jandex.spi.JandexValueExtractor;
2627
import org.hibernate.models.spi.AnnotationDescriptor;
2728
import org.hibernate.models.spi.AttributeDescriptor;
28-
import org.hibernate.models.spi.JandexValueExtractor;
2929
import org.hibernate.models.spi.SourceModelBuildingContext;
3030

3131
import org.jboss.jandex.AnnotationInstance;
32-
import org.jboss.jandex.AnnotationValue;
3332

3433
/**
3534
* @author Steve Ebersole
@@ -76,7 +75,8 @@ public static <V, A extends Annotation> V extractJdkValue(A jdkAnnotation, Annot
7675
}
7776

7877
public static <V> V extractJandexValue(AnnotationInstance jandexAnnotation, AttributeDescriptor<V> attributeDescriptor, SourceModelBuildingContext modelContext) {
79-
final JandexValueExtractor<V> extractor = attributeDescriptor.getTypeDescriptor().createJandexValueExtractor( modelContext );
78+
final JandexValueExtractor<V> extractor = modelContext.as( JandexModelBuildingContext.class )
79+
.getJandexValueExtractor( attributeDescriptor.getTypeDescriptor() );
8080
return extractor.extractValue( jandexAnnotation, attributeDescriptor, modelContext );
8181
// final AnnotationValue value = jandexAnnotation.value( attributeDescriptor.getName() );
8282
// return attributeDescriptor

hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/ManagedTypeProcessor.java

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,10 @@
4444
import org.hibernate.models.internal.ClassTypeDetailsImpl;
4545
import org.hibernate.models.internal.ModelsClassLogging;
4646
import org.hibernate.models.internal.ModifierUtils;
47-
import org.hibernate.models.internal.RenderingCollectorImpl;
4847
import org.hibernate.models.internal.dynamic.DynamicClassDetails;
4948
import org.hibernate.models.internal.dynamic.DynamicFieldDetails;
49+
import org.hibernate.models.rendering.internal.RenderingTargetCollectingImpl;
50+
import org.hibernate.models.rendering.internal.SimpleRenderer;
5051
import org.hibernate.models.spi.ClassDetails;
5152
import org.hibernate.models.spi.ClassDetailsRegistry;
5253
import org.hibernate.models.spi.FieldDetails;
@@ -99,17 +100,7 @@ public static void processCompleteEntity(
99100

100101
memberAdjuster = ManagedTypeProcessor::adjustDynamicTypeMember;
101102
classAccessType = AccessType.FIELD;
102-
classDetails = (MutableClassDetails) classDetailsRegistry.resolveClassDetails(
103-
jaxbEntity.getName(),
104-
(name) -> new DynamicClassDetails(
105-
jaxbEntity.getName(),
106-
null,
107-
false,
108-
null,
109-
null,
110-
xmlDocumentContext.getModelBuildingContext()
111-
)
112-
);
103+
classDetails = (MutableClassDetails) classDetailsRegistry.resolveClassDetails( jaxbEntity.getName() );
113104

114105
prepareDynamicClass( classDetails, jaxbEntity, xmlDocumentContext );
115106
}
@@ -625,9 +616,10 @@ private static void renderClass(MutableClassDetails classDetails, XmlDocumentCon
625616
return;
626617
}
627618

628-
final RenderingCollectorImpl renderingCollector = new RenderingCollectorImpl();
629-
classDetails.render( renderingCollector, xmlDocumentContext.getModelBuildingContext() );
630-
XML_PROCESS_LOGGER.debugf( "Class annotations from XML for %s:\n%s", classDetails.getName(), renderingCollector.toString() );
619+
final RenderingTargetCollectingImpl collectingTarget = new RenderingTargetCollectingImpl();
620+
final SimpleRenderer renderer = new SimpleRenderer( collectingTarget );
621+
renderer.renderClass( classDetails, xmlDocumentContext.getModelBuildingContext() );
622+
XML_PROCESS_LOGGER.debugf( "Class annotations from XML for %s:\n%s", classDetails.getName(), renderer.toString() );
631623
}
632624

633625
private static void applyAccessAnnotation(
@@ -943,7 +935,7 @@ public static void processCompleteEmbeddable(
943935
}
944936
// no class == dynamic...
945937
classDetails = (MutableClassDetails) classDetailsRegistry
946-
.resolveClassDetails( jaxbEmbeddable.getName(), DynamicClassDetails::new );
938+
.resolveClassDetails( jaxbEmbeddable.getName() );
947939
classAccessType = AccessType.FIELD;
948940
memberAdjuster = ManagedTypeProcessor::adjustDynamicTypeMember;
949941

0 commit comments

Comments
 (0)