Skip to content

Commit

Permalink
fix: register proxies to make Mysql HA work in native
Browse files Browse the repository at this point in the history
  • Loading branch information
machi1990 committed Mar 19, 2020
1 parent 98ed5fd commit 4d87443
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package io.quarkus.jdbc.mysql.deployment;

import java.io.Serializable;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.mysql.cj.MysqlConnection;
import com.mysql.cj.conf.PropertySet;
import com.mysql.cj.jdbc.JdbcConnection;
import com.mysql.cj.jdbc.JdbcPreparedStatement;
import com.mysql.cj.jdbc.JdbcPropertySet;
import com.mysql.cj.jdbc.JdbcStatement;
import com.mysql.cj.jdbc.ha.LoadBalancedConnection;
import com.mysql.cj.jdbc.ha.ReplicationConnection;
import com.mysql.cj.jdbc.result.ResultSetInternalMethods;
import com.mysql.cj.protocol.Resultset;

import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.nativeimage.NativeImageProxyDefinitionBuildItem;

public final class MySQLJDBCProxies {

@BuildStep
List<NativeImageProxyDefinitionBuildItem> registerProxies() {
List<NativeImageProxyDefinitionBuildItem> proxies = new ArrayList<>();
proxies.add(new NativeImageProxyDefinitionBuildItem(JdbcConnection.class.getName()));
proxies.add(new NativeImageProxyDefinitionBuildItem(MysqlConnection.class.getName()));
proxies.add(new NativeImageProxyDefinitionBuildItem(Statement.class.getName()));
proxies.add(new NativeImageProxyDefinitionBuildItem(AutoCloseable.class.getName()));
proxies.add(new NativeImageProxyDefinitionBuildItem(JdbcStatement.class.getName()));
proxies.add(
new NativeImageProxyDefinitionBuildItem(JdbcPreparedStatement.class.getName(), JdbcStatement.class.getName()));
proxies.add(new NativeImageProxyDefinitionBuildItem(JdbcPropertySet.class.getName(), PropertySet.class.getName(),
Serializable.class.getName()));
proxies.add(
new NativeImageProxyDefinitionBuildItem(Resultset.class.getName(), ResultSetInternalMethods.class.getName()));
proxies.add(new NativeImageProxyDefinitionBuildItem(LoadBalancedConnection.class.getName(),
JdbcConnection.class.getName()));
proxies.add(
new NativeImageProxyDefinitionBuildItem(ReplicationConnection.class.getName(), JdbcConnection.class.getName()));
return proxies;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.quarkus.jdbc.mysql.deployment;

import com.mysql.cj.MysqlConnection;
import com.mysql.cj.exceptions.AssertionFailedException;
import com.mysql.cj.exceptions.CJCommunicationsException;
import com.mysql.cj.exceptions.CJConnectionFeatureNotAvailableException;
Expand All @@ -26,6 +27,13 @@
import com.mysql.cj.exceptions.UnableToConnectException;
import com.mysql.cj.exceptions.UnsupportedConnectionStringException;
import com.mysql.cj.exceptions.WrongArgumentException;
import com.mysql.cj.jdbc.JdbcConnection;
import com.mysql.cj.jdbc.MysqlDataSource;
import com.mysql.cj.jdbc.MysqlXADataSource;
import com.mysql.cj.jdbc.ha.NdbLoadBalanceExceptionChecker;
import com.mysql.cj.jdbc.ha.ReplicationConnection;
import com.mysql.cj.jdbc.ha.ReplicationMySQLConnection;
import com.mysql.cj.jdbc.ha.StandardLoadBalanceExceptionChecker;
import com.mysql.cj.protocol.AsyncSocketFactory;
import com.mysql.cj.protocol.NamedPipeSocketFactory;
import com.mysql.cj.protocol.SocksProxySocketFactory;
Expand Down Expand Up @@ -71,6 +79,13 @@ void registerSocketFactoryForReflection(BuildProducer<ReflectiveClassBuildItem>
reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, AsyncSocketFactory.class.getName()));
}

@BuildStep
void registerLoadBalanceChecker(BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
reflectiveClass
.produce(new ReflectiveClassBuildItem(false, false, StandardLoadBalanceExceptionChecker.class.getName()));
reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, NdbLoadBalanceExceptionChecker.class.getName()));
}

@BuildStep
void registerExceptionsForReflection(BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, CJCommunicationsException.class.getName()));
Expand Down Expand Up @@ -103,5 +118,12 @@ void registerExceptionsForReflection(BuildProducer<ReflectiveClassBuildItem> ref
reflectiveClass
.produce(new ReflectiveClassBuildItem(false, false, UnsupportedConnectionStringException.class.getName()));
reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, WrongArgumentException.class.getName()));
reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, MysqlXADataSource.class.getName()));
reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, MysqlDataSource.class.getName()));
reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, MysqlConnection.class.getName()));
reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, ReplicationConnection.class.getName()));
reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, ReplicationMySQLConnection.class.getName()));
reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, JdbcConnection.class.getName()));
reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, "com.mysql.cj.jdbc.MysqlXAException"));
}
}

0 comments on commit 4d87443

Please sign in to comment.