diff --git a/extensions/jdbc/jdbc-mysql/deployment/src/main/java/io/quarkus/jdbc/mysql/deployment/MySQLJDBCProxies.java b/extensions/jdbc/jdbc-mysql/deployment/src/main/java/io/quarkus/jdbc/mysql/deployment/MySQLJDBCProxies.java new file mode 100644 index 00000000000000..09d46b4bbe9223 --- /dev/null +++ b/extensions/jdbc/jdbc-mysql/deployment/src/main/java/io/quarkus/jdbc/mysql/deployment/MySQLJDBCProxies.java @@ -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 registerProxies() { + List 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; + } +} diff --git a/extensions/jdbc/jdbc-mysql/deployment/src/main/java/io/quarkus/jdbc/mysql/deployment/MySQLJDBCReflections.java b/extensions/jdbc/jdbc-mysql/deployment/src/main/java/io/quarkus/jdbc/mysql/deployment/MySQLJDBCReflections.java index a85da95ca63071..d045030768b2c6 100644 --- a/extensions/jdbc/jdbc-mysql/deployment/src/main/java/io/quarkus/jdbc/mysql/deployment/MySQLJDBCReflections.java +++ b/extensions/jdbc/jdbc-mysql/deployment/src/main/java/io/quarkus/jdbc/mysql/deployment/MySQLJDBCReflections.java @@ -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; @@ -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; @@ -71,6 +79,13 @@ void registerSocketFactoryForReflection(BuildProducer reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, AsyncSocketFactory.class.getName())); } + @BuildStep + void registerLoadBalanceChecker(BuildProducer reflectiveClass) { + reflectiveClass + .produce(new ReflectiveClassBuildItem(false, false, StandardLoadBalanceExceptionChecker.class.getName())); + reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, NdbLoadBalanceExceptionChecker.class.getName())); + } + @BuildStep void registerExceptionsForReflection(BuildProducer reflectiveClass) { reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, CJCommunicationsException.class.getName())); @@ -103,5 +118,12 @@ void registerExceptionsForReflection(BuildProducer 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")); } }