Skip to content

Commit 123acaa

Browse files
committed
Register Hibernate service providers for native run-time access
Relates to quarkusio#41995
1 parent 0a44026 commit 123acaa

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/ClassNames.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,4 +465,22 @@ private static DotName createConstant(String fqcn) {
465465
"io.quarkus.hibernate.orm.deployment.HibernateUserTypeProcessor");
466466

467467
public static final DotName GRAAL_VM_FEATURES = createConstant("io.quarkus.hibernate.orm.deployment.GraalVMFeatures");
468+
469+
public static final List<DotName> SERVICE_PROVIDERS = List.of(
470+
// Accessed in org.hibernate.query.sqm.internal.SqmCriteriaNodeBuilder.<init>
471+
createConstant("org.hibernate.query.criteria.spi.CriteriaBuilderExtension"),
472+
// Accessed in io.quarkus.hibernate.orm.runtime.customized.QuarkusIntegratorServiceImpl.<init>
473+
createConstant("org.hibernate.integrator.spi.Integrator"),
474+
// Accessed in io.quarkus.hibernate.orm.runtime.customized.QuarkusStrategySelectorBuilder.buildSelector
475+
createConstant("org.hibernate.boot.registry.selector.StrategyRegistrationProvider"),
476+
// Accessed in io.quarkus.hibernate.orm.runtime.recording.RecordableBootstrap.applyServiceContributors
477+
createConstant("org.hibernate.service.spi.ServiceContributor"),
478+
// Accessed in org.hibernate.internal.FastSessionServices.<init>
479+
createConstant("org.hibernate.event.spi.EventManager"),
480+
// Accessed in org.hibernate.query.internal.QueryEngineImpl.sortedFunctionContributors
481+
createConstant("org.hibernate.boot.model.FunctionContributor"),
482+
// Accessed in org.hibernate.event.spi.EventEngine.<init>
483+
createConstant("org.hibernate.event.spi.EventEngineContributor"),
484+
// Accessed in org.hibernate.service.internal.SessionFactoryServiceRegistryFactoryImpl.buildServiceRegistry
485+
createConstant("org.hibernate.service.spi.SessionFactoryServiceContributor"));
468486
}

extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@
104104
import io.quarkus.deployment.builditem.nativeimage.NativeImageProxyDefinitionBuildItem;
105105
import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
106106
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
107+
import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;
107108
import io.quarkus.deployment.index.IndexingUtil;
108109
import io.quarkus.deployment.pkg.steps.NativeOrNativeSourcesBuild;
109110
import io.quarkus.deployment.recording.RecorderContext;
@@ -163,7 +164,11 @@ public final class HibernateOrmProcessor {
163164
private static final String INTEGRATOR_SERVICE_FILE = "META-INF/services/org.hibernate.integrator.spi.Integrator";
164165

165166
@BuildStep
166-
NativeImageFeatureBuildItem registerServicesForReflection() {
167+
NativeImageFeatureBuildItem registerServicesForReflection(BuildProducer<ServiceProviderBuildItem> services) {
168+
for (DotName serviceProvider : ClassNames.SERVICE_PROVIDERS) {
169+
services.produce(ServiceProviderBuildItem.allProvidersFromClassPath(serviceProvider.toString()));
170+
}
171+
167172
return new NativeImageFeatureBuildItem(RegisterServicesForReflectionFeature.class);
168173
}
169174

0 commit comments

Comments
 (0)