diff --git a/bom/application/pom.xml b/bom/application/pom.xml
index 85585e5fcee54..ff3f266f4f655 100644
--- a/bom/application/pom.xml
+++ b/bom/application/pom.xml
@@ -115,7 +115,7 @@
2.3.2
1.4.197
42.3.2
- 3.0.3
+ 2.7.5
8.0.28
7.2.2.jre8
21.4.0.0
diff --git a/extensions/jdbc/jdbc-mariadb/deployment/src/main/java/io/quarkus/jdbc/mariadb/deployment/JDBCMariaDBProcessor.java b/extensions/jdbc/jdbc-mariadb/deployment/src/main/java/io/quarkus/jdbc/mariadb/deployment/JDBCMariaDBProcessor.java
index 3f8e709f193ec..301e106f5afb2 100644
--- a/extensions/jdbc/jdbc-mariadb/deployment/src/main/java/io/quarkus/jdbc/mariadb/deployment/JDBCMariaDBProcessor.java
+++ b/extensions/jdbc/jdbc-mariadb/deployment/src/main/java/io/quarkus/jdbc/mariadb/deployment/JDBCMariaDBProcessor.java
@@ -12,9 +12,8 @@
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.FeatureBuildItem;
-import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
+import io.quarkus.deployment.builditem.SslNativeConfigBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;
-import io.quarkus.deployment.pkg.steps.NativeOrNativeSourcesBuild;
import io.quarkus.jdbc.mariadb.runtime.MariaDBAgroalConnectionConfigurer;
import io.quarkus.jdbc.mariadb.runtime.MariaDBServiceBindingConverter;
@@ -26,11 +25,10 @@ FeatureBuildItem feature() {
}
@BuildStep
- void registerDriver(BuildProducer jdbcDriver, BuildProducer dbKind) {
- jdbcDriver.produce(
- new JdbcDriverBuildItem(DatabaseKind.MARIADB, "org.mariadb.jdbc.Driver", "org.mariadb.jdbc.MariaDbDataSource"));
-
- dbKind.produce(new DefaultDataSourceDbKindBuildItem(DatabaseKind.MARIADB));
+ void registerDriver(BuildProducer jdbcDriver,
+ SslNativeConfigBuildItem sslNativeConfigBuildItem) {
+ jdbcDriver.produce(new JdbcDriverBuildItem(DatabaseKind.MARIADB, "org.mariadb.jdbc.Driver",
+ "org.mariadb.jdbc.MySQLDataSource"));
}
@BuildStep
@@ -49,28 +47,15 @@ void configureAgroalConnection(BuildProducer additional
}
}
- @BuildStep
- void registerAuthenticationPlugins(BuildProducer serviceProvider) {
- // make sure that all plugins are available
- serviceProvider
- .produce(ServiceProviderBuildItem.allProvidersFromClassPath("org.mariadb.jdbc.plugin.AuthenticationPlugin"));
- }
-
- @BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
- void addNativeImageResources(BuildProducer resources) {
- // mariadb.properties is used by org.mariadb.jdbc.util.VersionFactory and is small enough.
- // driver.properties is not added because it only provides optional descriptions for
- // org.mariadb.jdbc.Driver.getPropertyInfo(), which is probably not even called.
- resources.produce(new NativeImageResourceBuildItem("mariadb.properties"));
- }
-
@BuildStep
void registerServiceBinding(Capabilities capabilities,
- BuildProducer serviceProvider) {
+ BuildProducer serviceProvider,
+ BuildProducer dbKind) {
if (capabilities.isPresent(Capability.KUBERNETES_SERVICE_BINDING)) {
serviceProvider.produce(
new ServiceProviderBuildItem("io.quarkus.kubernetes.service.binding.runtime.ServiceBindingConverter",
MariaDBServiceBindingConverter.class.getName()));
}
+ dbKind.produce(new DefaultDataSourceDbKindBuildItem(DatabaseKind.MARIADB));
}
}
diff --git a/extensions/jdbc/jdbc-mariadb/deployment/src/main/java/io/quarkus/jdbc/mariadb/deployment/MariaDBJDBCReflections.java b/extensions/jdbc/jdbc-mariadb/deployment/src/main/java/io/quarkus/jdbc/mariadb/deployment/MariaDBJDBCReflections.java
index f4aeb8dfe5095..fe6934edd6c24 100644
--- a/extensions/jdbc/jdbc-mariadb/deployment/src/main/java/io/quarkus/jdbc/mariadb/deployment/MariaDBJDBCReflections.java
+++ b/extensions/jdbc/jdbc-mariadb/deployment/src/main/java/io/quarkus/jdbc/mariadb/deployment/MariaDBJDBCReflections.java
@@ -3,6 +3,7 @@
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.RuntimeInitializedClassBuildItem;
public final class MariaDBJDBCReflections {
@@ -11,10 +12,18 @@ void build(BuildProducer reflectiveClass) {
//Not strictly necessary when using Agroal, as it also registers
//any JDBC driver being configured explicitly through its configuration.
//We register it for the sake of people not using Agroal.
- reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, "org.mariadb.jdbc.Driver"));
+ final String driverName = "org.mariadb.jdbc.Driver";
+ reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, driverName));
- //MariaDB's connection process requires reflective read to all fields of Configuration and its Builder:
- reflectiveClass.produce(new ReflectiveClassBuildItem(false, true,
- "org.mariadb.jdbc.Configuration", "org.mariadb.jdbc.Configuration$Builder"));
+ //MariaDB's connection process requires reflective read to all fields of Options:
+ reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, "org.mariadb.jdbc.util.Options"));
+ }
+
+ @BuildStep
+ void runtimeInit(BuildProducer runtimeInitialized) {
+ //MastersSlavesListener starts threads in DynamicSizedSchedulerImpl which is disallowed during build time in GraalVM
+ runtimeInitialized
+ .produce(new RuntimeInitializedClassBuildItem(
+ "org.mariadb.jdbc.internal.failover.impl.MastersReplicasListener"));
}
}
diff --git a/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/AuthenticationPluginLoader_Substitutions.java b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/AuthenticationPluginLoader_Substitutions.java
new file mode 100644
index 0000000000000..8e701ccf2020a
--- /dev/null
+++ b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/AuthenticationPluginLoader_Substitutions.java
@@ -0,0 +1,52 @@
+package io.quarkus.jdbc.mariadb.runtime.graal;
+
+import java.sql.SQLException;
+
+import org.mariadb.jdbc.authentication.AuthenticationPlugin;
+import org.mariadb.jdbc.authentication.AuthenticationPluginLoader;
+import org.mariadb.jdbc.internal.com.send.authentication.ClearPasswordPlugin;
+import org.mariadb.jdbc.internal.com.send.authentication.Ed25519PasswordPlugin;
+import org.mariadb.jdbc.internal.com.send.authentication.NativePasswordPlugin;
+import org.mariadb.jdbc.internal.com.send.authentication.OldPasswordPlugin;
+import org.mariadb.jdbc.internal.com.send.authentication.SendGssApiAuthPacket;
+
+import com.oracle.svm.core.annotate.Substitute;
+import com.oracle.svm.core.annotate.TargetClass;
+
+@TargetClass(AuthenticationPluginLoader.class)
+@Substitute
+public final class AuthenticationPluginLoader_Substitutions {
+
+ public static final String MYSQL_NATIVE_PASSWORD = "mysql_native_password";
+ public static final String MYSQL_OLD_PASSWORD = "mysql_old_password";
+ public static final String MYSQL_CLEAR_PASSWORD = "mysql_clear_password";
+ public static final String MYSQL_ED25519_PASSWORD = "client_ed25519";
+ private static final String GSSAPI_CLIENT = "auth_gssapi_client";
+ private static final String DIALOG = "dialog";
+
+ @Substitute
+ public static AuthenticationPlugin get(String type) throws SQLException {
+ switch (type) {
+ case MYSQL_NATIVE_PASSWORD:
+ return new NativePasswordPlugin();
+ case MYSQL_OLD_PASSWORD:
+ return new OldPasswordPlugin();
+ case MYSQL_CLEAR_PASSWORD:
+ return new ClearPasswordPlugin();
+ case DIALOG:
+ throw new UnsupportedOperationException("Authentication strategy 'dialog' is not supported in GraalVM");
+ //return new SendPamAuthPacket();
+ case GSSAPI_CLIENT:
+ return new SendGssApiAuthPacket();
+ case MYSQL_ED25519_PASSWORD:
+ return new Ed25519PasswordPlugin();
+
+ default:
+ throw new SQLException(
+ "Client does not support authentication protocol requested by server. "
+ + "Consider upgrading MariaDB client. plugin was = " + type,
+ "08004", 1251);
+ }
+ }
+
+}
diff --git a/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/Pool_disable_JMX.java b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/Pool_disable_JMX.java
index 7c15d21192fc3..f7634281cdd84 100644
--- a/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/Pool_disable_JMX.java
+++ b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/Pool_disable_JMX.java
@@ -1,12 +1,12 @@
package io.quarkus.jdbc.mariadb.runtime.graal;
-import org.mariadb.jdbc.util.log.Logger;
+import org.mariadb.jdbc.internal.logging.Logger;
import com.oracle.svm.core.annotate.Alias;
import com.oracle.svm.core.annotate.Substitute;
import com.oracle.svm.core.annotate.TargetClass;
-@TargetClass(org.mariadb.jdbc.pool.Pool.class)
+@TargetClass(org.mariadb.jdbc.internal.util.pool.Pool.class)
public final class Pool_disable_JMX {
@Alias
diff --git a/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SendPamAuthPacket_Removal.java b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SendPamAuthPacket_Removal.java
new file mode 100644
index 0000000000000..06ec3829f6fac
--- /dev/null
+++ b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SendPamAuthPacket_Removal.java
@@ -0,0 +1,9 @@
+package io.quarkus.jdbc.mariadb.runtime.graal;
+
+import com.oracle.svm.core.annotate.Delete;
+import com.oracle.svm.core.annotate.TargetClass;
+
+@TargetClass(className = "org.mariadb.jdbc.internal.com.send.authentication.SendPamAuthPacket")
+@Delete
+public final class SendPamAuthPacket_Removal {
+}
diff --git a/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SendPamAuthPacket_Substitutions.java b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SendPamAuthPacket_Substitutions.java
deleted file mode 100644
index 3fbba0591916c..0000000000000
--- a/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SendPamAuthPacket_Substitutions.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package io.quarkus.jdbc.mariadb.runtime.graal;
-
-import java.io.IOException;
-import java.sql.SQLException;
-
-import org.mariadb.jdbc.Configuration;
-import org.mariadb.jdbc.client.Context;
-import org.mariadb.jdbc.client.ReadableByteBuf;
-import org.mariadb.jdbc.client.socket.Reader;
-import org.mariadb.jdbc.client.socket.Writer;
-
-import com.oracle.svm.core.annotate.Substitute;
-import com.oracle.svm.core.annotate.TargetClass;
-
-@TargetClass(className = "org.mariadb.jdbc.plugin.authentication.standard.SendPamAuthPacket")
-public final class SendPamAuthPacket_Substitutions {
-
- @Substitute
- public void initialize(String authenticationData, byte[] seed, Configuration conf) {
- throw new UnsupportedOperationException("Authentication strategy 'dialog' is not supported in GraalVM");
- }
-
- @Substitute
- public ReadableByteBuf process(Writer out, Reader in, Context context)
- throws SQLException, IOException {
- throw new UnsupportedOperationException("Authentication strategy 'dialog' is not supported in GraalVM");
- }
-}
diff --git a/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SharedMemorySocket_Removal.java b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SharedMemorySocket_Removal.java
new file mode 100644
index 0000000000000..e03e88ff79b8c
--- /dev/null
+++ b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SharedMemorySocket_Removal.java
@@ -0,0 +1,10 @@
+package io.quarkus.jdbc.mariadb.runtime.graal;
+
+import com.oracle.svm.core.annotate.Delete;
+import com.oracle.svm.core.annotate.TargetClass;
+
+@TargetClass(className = "org.mariadb.jdbc.internal.io.socket.SharedMemorySocket")
+@Delete
+public final class SharedMemorySocket_Removal {
+
+}
diff --git a/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SimpleSocketHandlerFunction.java b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SimpleSocketHandlerFunction.java
index 9e97bb0afb8f0..02c0136984a2a 100644
--- a/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SimpleSocketHandlerFunction.java
+++ b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SimpleSocketHandlerFunction.java
@@ -2,23 +2,23 @@
import java.io.IOException;
import java.net.Socket;
-import java.sql.SQLException;
-import org.mariadb.jdbc.Configuration;
-import org.mariadb.jdbc.HostAddress;
-import org.mariadb.jdbc.client.impl.ConnectionHelper;
-import org.mariadb.jdbc.client.socket.impl.SocketHandlerFunction;
+import org.mariadb.jdbc.internal.io.socket.SocketHandlerFunction;
+import org.mariadb.jdbc.internal.util.Utils;
+import org.mariadb.jdbc.util.Options;
public class SimpleSocketHandlerFunction implements SocketHandlerFunction {
@Override
- public Socket apply(Configuration conf, HostAddress hostAddress) throws IOException, SQLException {
- if (conf.pipe() != null) {
+ public Socket apply(Options options, String host) throws IOException {
+ if (options.pipe != null) {
throw new IllegalArgumentException(getErrorMessage("pipe"));
- } else if (conf.localSocket() != null) {
+ } else if (options.localSocket != null) {
throw new IllegalArgumentException(getErrorMessage("localSocket"));
+ } else if (options.sharedMemory != null) {
+ throw new IllegalArgumentException(getErrorMessage("sharedMemory"));
}
- return ConnectionHelper.standardSocket(conf, hostAddress);
+ return Utils.standardSocket(options, host);
}
private String getErrorMessage(String option) {
diff --git a/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SocketUtility_Substitutions.java b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SocketUtility_Substitutions.java
index aafaa8bb7e363..5daa3a585039f 100644
--- a/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SocketUtility_Substitutions.java
+++ b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/SocketUtility_Substitutions.java
@@ -1,11 +1,11 @@
package io.quarkus.jdbc.mariadb.runtime.graal;
-import org.mariadb.jdbc.client.socket.impl.SocketHandlerFunction;
+import org.mariadb.jdbc.internal.io.socket.SocketHandlerFunction;
import com.oracle.svm.core.annotate.Substitute;
import com.oracle.svm.core.annotate.TargetClass;
-@TargetClass(org.mariadb.jdbc.client.socket.impl.SocketUtility.class)
+@TargetClass(org.mariadb.jdbc.internal.io.socket.SocketUtility.class)
public final class SocketUtility_Substitutions {
// Ensure that JNA is never used
diff --git a/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/ConnectionHelper_socketHandler.java b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/Utils_socketHandler.java
similarity index 66%
rename from extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/ConnectionHelper_socketHandler.java
rename to extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/Utils_socketHandler.java
index a3a80a3c1dca6..b368bb37ab012 100644
--- a/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/ConnectionHelper_socketHandler.java
+++ b/extensions/jdbc/jdbc-mariadb/runtime/src/main/java/io/quarkus/jdbc/mariadb/runtime/graal/Utils_socketHandler.java
@@ -1,13 +1,13 @@
package io.quarkus.jdbc.mariadb.runtime.graal;
-import org.mariadb.jdbc.client.socket.impl.SocketHandlerFunction;
+import org.mariadb.jdbc.internal.io.socket.SocketHandlerFunction;
import com.oracle.svm.core.annotate.Alias;
import com.oracle.svm.core.annotate.RecomputeFieldValue;
import com.oracle.svm.core.annotate.TargetClass;
-@TargetClass(className = "org.mariadb.jdbc.client.impl.ConnectionHelper")
-public final class ConnectionHelper_socketHandler {
+@TargetClass(org.mariadb.jdbc.internal.util.Utils.class)
+public final class Utils_socketHandler {
@Alias
@RecomputeFieldValue(kind = RecomputeFieldValue.Kind.FromAlias)