From 34ecb90cd243b963fb28d693103f29c943547d94 Mon Sep 17 00:00:00 2001 From: George Gastaldi Date: Tue, 26 Nov 2024 14:43:12 -0300 Subject: [PATCH] Bump DB2 Driver to 12.1.0.0 It also uses the jakarta.transaction packages, so no need to transform it --- bom/application/pom.xml | 2 +- build-parent/pom.xml | 2 +- extensions/jdbc/jdbc-db2/deployment/pom.xml | 5 -- .../db2/deployment/JakartaEnablement.java | 88 ------------------- extensions/jdbc/jdbc-db2/runtime/pom.xml | 5 ++ .../runtime/graal/ConnectionSubstitution.java | 16 ++++ 6 files changed, 23 insertions(+), 95 deletions(-) delete mode 100644 extensions/jdbc/jdbc-db2/deployment/src/main/java/io/quarkus/jdbc/db2/deployment/JakartaEnablement.java create mode 100644 extensions/jdbc/jdbc-db2/runtime/src/main/java/io/quarkus/jdbc/db2/runtime/graal/ConnectionSubstitution.java diff --git a/bom/application/pom.xml b/bom/application/pom.xml index dab5707a867a8..ed3e6d47ff09c 100644 --- a/bom/application/pom.xml +++ b/bom/application/pom.xml @@ -126,7 +126,7 @@ 1.6.7 23.5.0.24.07 10.16.1.1 - 11.5.8.0 + 12.1.0.0 1.2.6 2.2 5.10.5 diff --git a/build-parent/pom.xml b/build-parent/pom.xml index bd780c85a57ff..1f87ebd0b8d77 100644 --- a/build-parent/pom.xml +++ b/build-parent/pom.xml @@ -85,7 +85,7 @@ docker.io/postgres:17 docker.io/mariadb:10.11 - icr.io/db2_community/db2:11.5.9.0 + icr.io/db2_community/db2:12.1.0.0 mcr.microsoft.com/mssql/server:2022-latest docker.io/mysql:8.4 docker.io/gvenzl/oracle-free:23-slim-faststart diff --git a/extensions/jdbc/jdbc-db2/deployment/pom.xml b/extensions/jdbc/jdbc-db2/deployment/pom.xml index 505fc714932be..6d0fb20af7436 100644 --- a/extensions/jdbc/jdbc-db2/deployment/pom.xml +++ b/extensions/jdbc/jdbc-db2/deployment/pom.xml @@ -52,11 +52,6 @@ assertj-core test - - org.eclipse.transformer - org.eclipse.transformer - 0.5.0 - diff --git a/extensions/jdbc/jdbc-db2/deployment/src/main/java/io/quarkus/jdbc/db2/deployment/JakartaEnablement.java b/extensions/jdbc/jdbc-db2/deployment/src/main/java/io/quarkus/jdbc/db2/deployment/JakartaEnablement.java deleted file mode 100644 index ce8ec45c8ad26..0000000000000 --- a/extensions/jdbc/jdbc-db2/deployment/src/main/java/io/quarkus/jdbc/db2/deployment/JakartaEnablement.java +++ /dev/null @@ -1,88 +0,0 @@ -package io.quarkus.jdbc.db2.deployment; - -import java.nio.ByteBuffer; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import org.eclipse.transformer.action.ActionContext; -import org.eclipse.transformer.action.ByteData; -import org.eclipse.transformer.action.impl.ActionContextImpl; -import org.eclipse.transformer.action.impl.ByteDataImpl; -import org.eclipse.transformer.action.impl.ClassActionImpl; -import org.eclipse.transformer.action.impl.SelectionRuleImpl; -import org.eclipse.transformer.action.impl.SignatureRuleImpl; -import org.eclipse.transformer.util.FileUtils; -import org.objectweb.asm.ClassReader; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import io.quarkus.bootstrap.classloading.QuarkusClassLoader; -import io.quarkus.deployment.annotations.BuildProducer; -import io.quarkus.deployment.annotations.BuildStep; -import io.quarkus.deployment.builditem.BytecodeTransformerBuildItem; - -/** - * The DB2 driver is compiled using references to classes in the jakarta.transaction - * package; we need to transform these to fix compatibility with jakarta.transaction. - * We do this by leveraging the Eclipse Transformer project during Augmentation, so - * that end users don't need to bother. - */ -public class JakartaEnablement { - - private static final List CLASSES_NEEDING_TRANSFORMATION = List.of( - "com.ibm.db2.jcc.t2zos.ab", - "com.ibm.db2.jcc.t2zos.T2zosConnection", - "com.ibm.db2.jcc.t2zos.T2zosConfiguration"); - - @BuildStep - void transformToJakarta(BuildProducer transformers) { - if (QuarkusClassLoader.isClassPresentAtRuntime("jakarta.transaction.Transaction")) { - JakartaTransformer tr = new JakartaTransformer(); - for (String classname : CLASSES_NEEDING_TRANSFORMATION) { - final BytecodeTransformerBuildItem item = new BytecodeTransformerBuildItem.Builder() - .setCacheable(true) - .setContinueOnFailure(false) - .setClassToTransform(classname) - .setClassReaderOptions(ClassReader.SKIP_DEBUG) - .setInputTransformer(tr::transform) - .build(); - transformers.produce(item); - } - } - } - - private static class JakartaTransformer { - - private final Logger logger; - private final ActionContext ctx; - private static final Map renames = Collections.singletonMap(forbiddenName(), "jakarta.transaction"); - - JakartaTransformer() { - logger = LoggerFactory.getLogger("JakartaTransformer"); - //N.B. we enable only this single transformation of package renames, not the full set of capabilities of Eclipse Transformer; - //this might need tailoring if the same idea gets applied to a different context. - ctx = new ActionContextImpl(logger, - new SelectionRuleImpl(logger, Collections.emptyMap(), Collections.emptyMap()), - new SignatureRuleImpl(logger, renames, null, null, null, null, null, Collections.emptyMap())); - } - - //Need to prevent the Eclipse Transformer - which is run on this whole code base - to actually replace this name: - private static String forbiddenName() { - StringBuilder sb = new StringBuilder("java") - .append("x.") - .append("transaction"); - return sb.toString(); - } - - byte[] transform(final String name, final byte[] bytes) { - logger.info("Jakarta EE compatibility enhancer for Quarkus: transforming " + name); - final ClassActionImpl classTransformer = new ClassActionImpl(ctx); - final ByteBuffer input = ByteBuffer.wrap(bytes); - final ByteData inputData = new ByteDataImpl(name, input, FileUtils.DEFAULT_CHARSET); - final ByteData outputData = classTransformer.apply(inputData); - return outputData.buffer().array(); - } - } - -} diff --git a/extensions/jdbc/jdbc-db2/runtime/pom.xml b/extensions/jdbc/jdbc-db2/runtime/pom.xml index 63657a6665fc2..1f566f3af042f 100644 --- a/extensions/jdbc/jdbc-db2/runtime/pom.xml +++ b/extensions/jdbc/jdbc-db2/runtime/pom.xml @@ -26,6 +26,11 @@ io.quarkus quarkus-agroal + + org.graalvm.sdk + nativeimage + provided + io.quarkus quarkus-kubernetes-service-binding diff --git a/extensions/jdbc/jdbc-db2/runtime/src/main/java/io/quarkus/jdbc/db2/runtime/graal/ConnectionSubstitution.java b/extensions/jdbc/jdbc-db2/runtime/src/main/java/io/quarkus/jdbc/db2/runtime/graal/ConnectionSubstitution.java new file mode 100644 index 0000000000000..35fcde3eaeacc --- /dev/null +++ b/extensions/jdbc/jdbc-db2/runtime/src/main/java/io/quarkus/jdbc/db2/runtime/graal/ConnectionSubstitution.java @@ -0,0 +1,16 @@ +package io.quarkus.jdbc.db2.runtime.graal; + +import java.sql.SQLException; + +import com.ibm.db2.jcc.am.Connection; +import com.oracle.svm.core.annotate.Substitute; +import com.oracle.svm.core.annotate.TargetClass; + +@TargetClass(Connection.class) +public final class ConnectionSubstitution { + + @Substitute + private void checkForLicenseRestrictions() throws SQLException { + // Do nothing + } +}