From 3f648f54c52efa0b79e1877a779e57fd21ff2b08 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 25 May 2023 18:45:27 +0200 Subject: [PATCH 1/2] Set hibernate.cdi.extensions (for SpringBeanContainer on Hibernate 6.2) Closes gh-30545 --- .../orm/jpa/vendor/HibernateJpaVendorAdapter.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java index 6cd463dcdb7..4f07bd712a1 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java @@ -165,6 +165,9 @@ public class HibernateJpaVendorAdapter extends AbstractJpaVendorAdapter { PhysicalConnectionHandlingMode.DELAYED_ACQUISITION_AND_HOLD); } + // For SpringBeanContainer to be called on Hibernate 6.2 + jpaProperties.put("hibernate.cdi.extensions", "true"); + return jpaProperties; } From 5e625c8d2efc4bdf66ce0cf2c6fa58488486c395 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 25 May 2023 18:45:32 +0200 Subject: [PATCH 2/2] Polishing --- .../BeanValidationBeanRegistrationAotProcessor.java | 7 +++++-- .../persistenceunit/DefaultPersistenceUnitManager.java | 9 ++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/BeanValidationBeanRegistrationAotProcessor.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/BeanValidationBeanRegistrationAotProcessor.java index 05d39d12c32..4be55576558 100644 --- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/BeanValidationBeanRegistrationAotProcessor.java +++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/BeanValidationBeanRegistrationAotProcessor.java @@ -54,7 +54,7 @@ import org.springframework.util.ClassUtils; */ class BeanValidationBeanRegistrationAotProcessor implements BeanRegistrationAotProcessor { - private static final boolean isBeanValidationPresent = ClassUtils.isPresent( + private static final boolean beanValidationPresent = ClassUtils.isPresent( "jakarta.validation.Validation", BeanValidationBeanRegistrationAotProcessor.class.getClassLoader()); private static final Log logger = LogFactory.getLog(BeanValidationBeanRegistrationAotProcessor.class); @@ -63,13 +63,16 @@ class BeanValidationBeanRegistrationAotProcessor implements BeanRegistrationAotP @Override @Nullable public BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean) { - if (isBeanValidationPresent) { + if (beanValidationPresent) { return BeanValidationDelegate.processAheadOfTime(registeredBean); } return null; } + /** + * Inner class to avoid a hard dependency on the Bean Validation API at runtime. + */ private static class BeanValidationDelegate { @Nullable diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java index bc19a2e1df7..8e33ba53b93 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -444,9 +444,12 @@ public class DefaultPersistenceUnitManager List puis = readPersistenceUnitInfos(); for (SpringPersistenceUnitInfo pui : puis) { + // Determine default persistence unit root URL if (pui.getPersistenceUnitRootUrl() == null) { pui.setPersistenceUnitRootUrl(determineDefaultPersistenceUnitRootUrl()); } + + // Override DataSource and cache/validation mode if (pui.getJtaDataSource() == null && this.defaultJtaDataSource != null) { pui.setJtaDataSource(this.defaultJtaDataSource); } @@ -459,13 +462,17 @@ public class DefaultPersistenceUnitManager if (this.validationMode != null) { pui.setValidationMode(this.validationMode); } + + // Initialize persistence unit ClassLoader if (this.loadTimeWeaver != null) { pui.init(this.loadTimeWeaver); } else { pui.init(this.resourcePatternResolver.getClassLoader()); } + postProcessPersistenceUnitInfo(pui); + String name = pui.getPersistenceUnitName(); if (!this.persistenceUnitInfoNames.add(name) && !isPersistenceUnitOverrideAllowed()) { StringBuilder msg = new StringBuilder();