From b9a2dda16df6f9ac01ec3db6215136d8988f2e59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Barto=C5=A1?= Date: Wed, 2 Jul 2025 16:51:01 +0200 Subject: [PATCH] Upgrade to the Quarkus 3.24.2 version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #40592 Signed-off-by: Martin Bartoš --- .../connections/jpa/util/JpaUtils.java | 24 +++++++++++++++---- pom.xml | 12 +++++----- quarkus/deployment/pom.xml | 20 ++++++++++++++++ .../quarkus/deployment/KeycloakProcessor.java | 17 +++++++++---- 4 files changed, 58 insertions(+), 15 deletions(-) diff --git a/model/jpa/src/main/java/org/keycloak/connections/jpa/util/JpaUtils.java b/model/jpa/src/main/java/org/keycloak/connections/jpa/util/JpaUtils.java index 4b84cbe7aaa6..44487f4d7fc8 100644 --- a/model/jpa/src/main/java/org/keycloak/connections/jpa/util/JpaUtils.java +++ b/model/jpa/src/main/java/org/keycloak/connections/jpa/util/JpaUtils.java @@ -17,28 +17,33 @@ package org.keycloak.connections.jpa.util; +import jakarta.persistence.PersistenceUnitTransactionType; import jakarta.persistence.ValidationMode; import org.hibernate.dialect.Dialect; import org.hibernate.internal.SessionFactoryImpl; +import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor; +import org.hibernate.jpa.boot.spi.PersistenceXmlParser; import org.jboss.logging.Logger; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.jpa.boot.internal.ParsedPersistenceXmlDescriptor; -import org.hibernate.jpa.boot.internal.PersistenceXmlParser; import org.hibernate.jpa.boot.spi.Bootstrap; import org.keycloak.connections.jpa.entityprovider.JpaEntityProvider; import org.keycloak.models.KeycloakSession; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; -import jakarta.persistence.spi.PersistenceUnitTransactionType; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.NoSuchElementException; import java.util.Properties; import java.util.Set; +import java.util.stream.Collectors; /** * @author Marek Posolda @@ -56,11 +61,22 @@ public static String getTableNameForNativeQuery(String tableName, EntityManager return (schema==null) ? tableName : dialect.openQuote() + schema + dialect.closeQuote() + "." + tableName; } + private static List transformPersistenceUnits(Collection descriptors) { + return descriptors.stream().map(descriptor -> (ParsedPersistenceXmlDescriptor) descriptor).collect(Collectors.toList()); + } + public static EntityManagerFactory createEntityManagerFactory(KeycloakSession session, String unitName, Map properties, boolean jta) { PersistenceUnitTransactionType txType = jta ? PersistenceUnitTransactionType.JTA : PersistenceUnitTransactionType.RESOURCE_LOCAL; - List persistenceUnits = new ArrayList<>(PersistenceXmlParser.locatePersistenceUnits(properties)); + PersistenceXmlParser parser = PersistenceXmlParser.create(properties); + List urls = parser.getClassLoaderService().locateResources("META-INF/persistence.xml"); - persistenceUnits.add(PersistenceXmlParser.locateIndividualPersistenceUnit(JpaUtils.class.getClassLoader().getResource("default-persistence.xml"))); + List persistenceUnits = urls.isEmpty() ? new ArrayList<>() : transformPersistenceUnits(parser.parse(urls).values()); + ParsedPersistenceXmlDescriptor defaultPersistenceUnit = transformPersistenceUnits(parser.parse(Collections.singletonList(JpaUtils.class.getClassLoader().getResource("default-persistence.xml")), txType) + .values()) + .stream() + .findFirst() + .orElseThrow(() -> new NoSuchElementException("Cannot find the file 'default-persistence.xml'")); + persistenceUnits.add(defaultPersistenceUnit); for (ParsedPersistenceXmlDescriptor persistenceUnit : persistenceUnits) { if (persistenceUnit.getName().equals(unitName)) { diff --git a/pom.xml b/pom.xml index 1ffa108e02a0..2574b5274ddf 100644 --- a/pom.xml +++ b/pom.xml @@ -45,8 +45,8 @@ 1.5.8 - 3.20.1 - 3.20.1 + 3.24.2 + 3.24.2 3.0.4.Final ${timestamp} @@ -120,7 +120,7 @@ ${undertow-legacy.version} 2.2.24.Final 2.3.2.Final - 2.6.3.Final + 2.6.4.Final 1.9.0.Final 6.0.3 1.5.4.Final-format-001 @@ -158,14 +158,14 @@ mirror.gcr.io/postgres:${postgresql.version} 16.8 2.5.6 - 42.7.5 + 42.7.7 11.4 mirror.gcr.io/mariadb:${mariadb.version} - 3.5.2 + 3.5.4 2022 mcr.microsoft.com/mssql/server:${mssql.version}-latest - 12.8.1.jre11 + 12.10.0.jre11 23.5 mirror.gcr.io/gvenzl/oracle-free:${oracledb.version}-slim-faststart diff --git a/quarkus/deployment/pom.xml b/quarkus/deployment/pom.xml index 04fc59b27586..981102203d60 100644 --- a/quarkus/deployment/pom.xml +++ b/quarkus/deployment/pom.xml @@ -43,6 +43,12 @@ io.quarkus quarkus-arc-deployment + + + io.quarkus + quarkus-arc-dev + + io.quarkus @@ -52,6 +58,10 @@ io.quarkus quarkus-vertx-http-dev-ui-resources + + io.quarkus + quarkus-assistant-dev + io.mvnpm importmap @@ -115,6 +125,12 @@ io.quarkus quarkus-rest-deployment + + + io.quarkus + quarkus-rest-dev + + io.quarkus @@ -132,6 +148,10 @@ io.quarkus quarkus-devservices-deployment + + io.quarkus + quarkus-datasource-dev + io.quarkus quarkus-agroal-dev diff --git a/quarkus/deployment/src/main/java/org/keycloak/quarkus/deployment/KeycloakProcessor.java b/quarkus/deployment/src/main/java/org/keycloak/quarkus/deployment/KeycloakProcessor.java index dfef6e973be4..8f58ed5e6b97 100644 --- a/quarkus/deployment/src/main/java/org/keycloak/quarkus/deployment/KeycloakProcessor.java +++ b/quarkus/deployment/src/main/java/org/keycloak/quarkus/deployment/KeycloakProcessor.java @@ -52,12 +52,12 @@ import io.quarkus.vertx.http.deployment.NonApplicationRootPathBuildItem; import io.quarkus.vertx.http.deployment.RouteBuildItem; import jakarta.persistence.Entity; -import jakarta.persistence.spi.PersistenceUnitTransactionType; +import jakarta.persistence.PersistenceUnitTransactionType; import org.eclipse.microprofile.health.Readiness; import org.hibernate.cfg.AvailableSettings; import org.hibernate.jpa.boot.internal.ParsedPersistenceXmlDescriptor; -import org.hibernate.jpa.boot.internal.PersistenceXmlParser; import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor; +import org.hibernate.jpa.boot.spi.PersistenceXmlParser; import org.infinispan.protostream.SerializationContextInitializer; import org.jboss.jandex.AnnotationInstance; import org.jboss.jandex.AnnotationTarget; @@ -141,11 +141,13 @@ import java.nio.file.Path; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.NoSuchElementException; import java.util.Optional; import java.util.Properties; import java.util.ServiceLoader; @@ -413,8 +415,12 @@ void configurePersistenceUnits(HibernateOrmConfig config, @Consume(CheckJdbcBuildStep.class) @Consume(CheckMultipleDatasourcesBuildStep.class) void produceDefaultPersistenceUnit(BuildProducer producer) { - ParsedPersistenceXmlDescriptor descriptor = PersistenceXmlParser.locateIndividualPersistenceUnit( - Thread.currentThread().getContextClassLoader().getResource("default-persistence.xml")); + PersistenceXmlParser parser = PersistenceXmlParser.create(); + PersistenceUnitDescriptor descriptor = parser.parse(Collections.singletonList(parser.getClassLoaderService().locateResource("default-persistence.xml"))) + .values() + .stream() + .findAny() + .orElseThrow(() -> new NoSuchElementException("Cannot find the file 'default-persistence.xml'")); producer.produce(new PersistenceXmlDescriptorBuildItem(descriptor)); } @@ -546,7 +552,8 @@ private void configureUserDefinedPersistenceUnits(List { + .filter(Predicate.not("keycloak-default"::equals)) + .forEach((String unitName) -> { NamedJpaConnectionProviderFactory factory = new NamedJpaConnectionProviderFactory(); factory.setUnitName(unitName);