Skip to content

Commit

Permalink
Revert "Upgrade mariadb-java-client from 2.7.5 to 3.0.3"
Browse files Browse the repository at this point in the history
This reverts commit 8a174ef.
  • Loading branch information
famod committed Feb 8, 2022
1 parent e21e338 commit eb265b0
Show file tree
Hide file tree
Showing 11 changed files with 109 additions and 72 deletions.
2 changes: 1 addition & 1 deletion bom/application/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@
<quartz.version>2.3.2</quartz.version>
<h2.version>1.4.197</h2.version> <!-- keep 1.4.197 as newer versions have severe regressions -->
<postgresql-jdbc.version>42.3.2</postgresql-jdbc.version>
<mariadb-jdbc.version>3.0.3</mariadb-jdbc.version>
<mariadb-jdbc.version>2.7.5</mariadb-jdbc.version>
<mysql-jdbc.version>8.0.28</mysql-jdbc.version>
<mssql-jdbc.version>7.2.2.jre8</mssql-jdbc.version>
<oracle-jdbc.version>21.4.0.0</oracle-jdbc.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -26,11 +25,10 @@ FeatureBuildItem feature() {
}

@BuildStep
void registerDriver(BuildProducer<JdbcDriverBuildItem> jdbcDriver, BuildProducer<DefaultDataSourceDbKindBuildItem> dbKind) {
jdbcDriver.produce(
new JdbcDriverBuildItem(DatabaseKind.MARIADB, "org.mariadb.jdbc.Driver", "org.mariadb.jdbc.MariaDbDataSource"));

dbKind.produce(new DefaultDataSourceDbKindBuildItem(DatabaseKind.MARIADB));
void registerDriver(BuildProducer<JdbcDriverBuildItem> jdbcDriver,
SslNativeConfigBuildItem sslNativeConfigBuildItem) {
jdbcDriver.produce(new JdbcDriverBuildItem(DatabaseKind.MARIADB, "org.mariadb.jdbc.Driver",
"org.mariadb.jdbc.MySQLDataSource"));
}

@BuildStep
Expand All @@ -49,28 +47,15 @@ void configureAgroalConnection(BuildProducer<AdditionalBeanBuildItem> additional
}
}

@BuildStep
void registerAuthenticationPlugins(BuildProducer<ServiceProviderBuildItem> serviceProvider) {
// make sure that all plugins are available
serviceProvider
.produce(ServiceProviderBuildItem.allProvidersFromClassPath("org.mariadb.jdbc.plugin.AuthenticationPlugin"));
}

@BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
void addNativeImageResources(BuildProducer<NativeImageResourceBuildItem> 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<ServiceProviderBuildItem> serviceProvider) {
BuildProducer<ServiceProviderBuildItem> serviceProvider,
BuildProducer<DefaultDataSourceDbKindBuildItem> 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));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand All @@ -11,10 +12,18 @@ void build(BuildProducer<ReflectiveClassBuildItem> 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<RuntimeInitializedClassBuildItem> 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"));
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}

}
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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 {

}
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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)
Expand Down

0 comments on commit eb265b0

Please sign in to comment.