Skip to content

Commit 9b5bb97

Browse files
committed
HHH-9887 - Make sure the JPA temp ClassLoader is not used to load Class definitions that are then held on to
1 parent 0d6393a commit 9b5bb97

File tree

4 files changed

+37
-45
lines changed

4 files changed

+37
-45
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import org.hibernate.boot.spi.MetadataBuilderImplementor;
5454
import org.hibernate.boot.spi.MetadataBuilderInitializer;
5555
import org.hibernate.boot.spi.MetadataBuildingOptions;
56+
import org.hibernate.boot.spi.MetadataImplementor;
5657
import org.hibernate.boot.spi.MetadataSourcesContributor;
5758
import org.hibernate.cache.spi.RegionFactory;
5859
import org.hibernate.cache.spi.access.AccessType;
@@ -385,7 +386,7 @@ public MetadataBuilder applyIdGenerationTypeInterpreter(IdGeneratorStrategyInter
385386
// }
386387

387388
@Override
388-
public MetadataImpl build() {
389+
public MetadataImplementor build() {
389390
final CfgXmlAccessService cfgXmlAccessService = options.serviceRegistry.getService( CfgXmlAccessService.class );
390391
if ( cfgXmlAccessService.getAggregatedConfig() != null ) {
391392
if ( cfgXmlAccessService.getAggregatedConfig().getMappingReferences() != null ) {

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

Lines changed: 0 additions & 38 deletions
This file was deleted.

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

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,12 @@
1313
import org.hibernate.boot.MetadataSources;
1414
import org.hibernate.boot.internal.ClassLoaderAccessImpl;
1515
import org.hibernate.boot.internal.InFlightMetadataCollectorImpl;
16-
import org.hibernate.boot.internal.MetadataBuilderImpl.MetadataBuildingOptionsImpl;
1716
import org.hibernate.boot.internal.MetadataBuildingContextRootImpl;
18-
import org.hibernate.boot.internal.MetadataImpl;
1917
import org.hibernate.boot.jaxb.internal.MappingBinder;
2018
import org.hibernate.boot.model.TypeContributions;
2119
import org.hibernate.boot.model.TypeContributor;
22-
import org.hibernate.boot.model.process.internal.ManagedResourcesBuilder;
20+
import org.hibernate.boot.model.process.internal.ManagedResourcesImpl;
21+
import org.hibernate.boot.model.process.internal.ScanningCoordinator;
2322
import org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl;
2423
import org.hibernate.boot.model.source.internal.hbm.EntityHierarchyBuilder;
2524
import org.hibernate.boot.model.source.internal.hbm.EntityHierarchySourceImpl;
@@ -32,6 +31,7 @@
3231
import org.hibernate.boot.spi.ClassLoaderAccess;
3332
import org.hibernate.boot.spi.MetadataBuildingOptions;
3433
import org.hibernate.boot.spi.MetadataContributor;
34+
import org.hibernate.boot.spi.MetadataImplementor;
3535
import org.hibernate.cfg.AttributeConverterDefinition;
3636
import org.hibernate.cfg.MetadataSourceType;
3737
import org.hibernate.dialect.Dialect;
@@ -67,19 +67,45 @@
6767
public class MetadataBuildingProcess {
6868
private static final Logger log = Logger.getLogger( MetadataBuildingProcess.class );
6969

70-
public static MetadataImpl build(
70+
/**
71+
* Unified single phase for MetadataSources->Metadata process
72+
*
73+
* @param sources The MetadataSources
74+
* @param options The building options
75+
*
76+
* @return The built Metadata
77+
*/
78+
public static MetadataImplementor build(
7179
final MetadataSources sources,
7280
final MetadataBuildingOptions options) {
7381
return complete( prepare( sources, options ), options );
7482
}
7583

84+
/**
85+
* First step of 2-phase for MetadataSources->Metadata process
86+
*
87+
* @param sources The MetadataSources
88+
* @param options The building options
89+
*
90+
* @return Token/memento representing all known users resources (classes, packages, mapping files, etc).
91+
*/
7692
public static ManagedResources prepare(
7793
final MetadataSources sources,
7894
final MetadataBuildingOptions options) {
79-
return ManagedResourcesBuilder.INSTANCE.buildCompleteManagedResources( sources, options );
95+
final ManagedResourcesImpl managedResources = ManagedResourcesImpl.baseline( sources, options );
96+
ScanningCoordinator.INSTANCE.coordinateScan( managedResources, options, sources.getXmlMappingBinderAccess() );
97+
return managedResources;
8098
}
8199

82-
public static MetadataImpl complete(final ManagedResources managedResources, final MetadataBuildingOptions options) {
100+
/**
101+
* Second step of 2-phase for MetadataSources->Metadata process
102+
*
103+
* @param managedResources The token/memento from 1st phase
104+
* @param options The building options
105+
*
106+
* @return Token/memento representing all known users resources (classes, packages, mapping files, etc).
107+
*/
108+
public static MetadataImplementor complete(final ManagedResources managedResources, final MetadataBuildingOptions options) {
83109
final BasicTypeRegistry basicTypeRegistry = handleTypes( options );
84110

85111
final InFlightMetadataCollectorImpl metadataCollector = new InFlightMetadataCollectorImpl(

hibernate-entitymanager/src/main/java/org/hibernate/jpa/boot/internal/EntityManagerFactoryBuilderImpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,9 @@ public EntityManagerFactoryBuilderImpl(
205205
if ( useClassTransformer ) {
206206
persistenceUnit.pushClassTransformer( managedResources.getAnnotatedClassNames() );
207207
}
208+
209+
// for the time being we want to revoke access to the temp ClassLoader if one was passed
210+
metamodelBuilder.applyTempClassLoader( null );
208211
}
209212

210213
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

0 commit comments

Comments
 (0)