Skip to content

Commit

Permalink
Avoid reifing Agroal configuration too early
Browse files Browse the repository at this point in the history
In OracleAgroalConnectionConfigurer, we are reifing the Agroal config
and we shouldn't do it at this stage.
We need to check the properties directly and thus we add them to
AgroalConnectionConfigurer. I kept the old method for now but it will be
removed at some point in the future.

Fixes quarkusio#44687
  • Loading branch information
gsmet committed Nov 25, 2024
1 parent 87e1d39 commit 4367b5f
Show file tree
Hide file tree
Showing 8 changed files with 38 additions and 14 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.quarkus.agroal.runtime;

import java.util.Map;

import org.jboss.logging.Logger;

import io.agroal.api.configuration.supplier.AgroalDataSourceConfigurationSupplier;
Expand All @@ -8,10 +10,19 @@ public interface AgroalConnectionConfigurer {

Logger log = Logger.getLogger(AgroalConnectionConfigurer.class.getName());

/**
* @deprecated use {@link #disableSslSupport(String, AgroalDataSourceConfigurationSupplier, Map)} instead
*/
@Deprecated(since = "3.18", forRemoval = true)
default void disableSslSupport(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration) {
log.warnv("Agroal does not support disabling SSL for database kind: {0}", databaseKind);
}

default void disableSslSupport(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration,
Map<String, String> additionalJdbcProperties) {
disableSslSupport(databaseKind, dataSourceConfiguration);
}

default void setExceptionSorter(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration) {
log.warnv("Agroal does not support detecting if a connection is still usable after an exception for database kind: {0}",
databaseKind);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,8 @@ public AgroalDataSource createDataSource(String dataSourceName) {
mpMetricsPresent);

if (agroalDataSourceSupport.disableSslSupport) {
agroalConnectionConfigurer.disableSslSupport(resolvedDbKind, dataSourceConfiguration);
agroalConnectionConfigurer.disableSslSupport(resolvedDbKind, dataSourceConfiguration,
dataSourceJdbcRuntimeConfig.additionalJdbcProperties());
}
//we use a custom cache for two reasons:
//fast thread local cache should be faster
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.quarkus.jdbc.h2.runtime;

import java.util.Map;

import io.agroal.api.configuration.supplier.AgroalDataSourceConfigurationSupplier;
import io.quarkus.agroal.runtime.AgroalConnectionConfigurer;
import io.quarkus.agroal.runtime.JdbcDriver;
Expand All @@ -9,7 +11,8 @@
public class H2AgroalConnectionConfigurer implements AgroalConnectionConfigurer {

@Override
public void disableSslSupport(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration) {
public void disableSslSupport(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration,
Map<String, String> additionalProperties) {
// do not log anything for H2
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.quarkus.jdbc.mariadb.runtime;

import java.util.Map;

import io.agroal.api.configuration.supplier.AgroalDataSourceConfigurationSupplier;
import io.agroal.api.exceptionsorter.MySQLExceptionSorter;
import io.quarkus.agroal.runtime.AgroalConnectionConfigurer;
Expand All @@ -10,7 +12,8 @@
public class MariaDBAgroalConnectionConfigurer implements AgroalConnectionConfigurer {

@Override
public void disableSslSupport(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration) {
public void disableSslSupport(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration,
Map<String, String> additionalProperties) {
dataSourceConfiguration.connectionPoolConfiguration().connectionFactoryConfiguration().jdbcProperty("useSSL", "false");
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.quarkus.jdbc.mssql.runtime;

import java.util.Map;

import io.agroal.api.configuration.supplier.AgroalDataSourceConfigurationSupplier;
import io.agroal.api.exceptionsorter.MSSQLExceptionSorter;
import io.quarkus.agroal.runtime.AgroalConnectionConfigurer;
Expand All @@ -10,7 +12,8 @@
public class MsSQLAgroalConnectionConfigurer implements AgroalConnectionConfigurer {

@Override
public void disableSslSupport(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration) {
public void disableSslSupport(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration,
Map<String, String> additionalProperties) {
dataSourceConfiguration.connectionPoolConfiguration().connectionFactoryConfiguration().jdbcProperty("encrypt", "false");
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.quarkus.jdbc.mysql.runtime;

import java.util.Map;

import io.agroal.api.configuration.supplier.AgroalDataSourceConfigurationSupplier;
import io.agroal.api.exceptionsorter.MySQLExceptionSorter;
import io.quarkus.agroal.runtime.AgroalConnectionConfigurer;
Expand All @@ -10,7 +12,8 @@
public class MySQLAgroalConnectionConfigurer implements AgroalConnectionConfigurer {

@Override
public void disableSslSupport(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration) {
public void disableSslSupport(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration,
Map<String, String> additionalProperties) {
dataSourceConfiguration.connectionPoolConfiguration().connectionFactoryConfiguration().jdbcProperty("useSSL", "false");
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.quarkus.jdbc.oracle.runtime;

import java.util.Properties;
import java.util.Map;

import io.agroal.api.configuration.supplier.AgroalDataSourceConfigurationSupplier;
import io.agroal.api.exceptionsorter.OracleExceptionSorter;
Expand All @@ -19,13 +19,10 @@ public class OracleAgroalConnectionConfigurer implements AgroalConnectionConfigu
* enable it.
*/
@Override
public void disableSslSupport(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration) {
final Properties jdbcProperties = dataSourceConfiguration.connectionPoolConfiguration()
.connectionFactoryConfiguration()
.get()
.jdbcProperties();
final Object setting = jdbcProperties.get("oracle.net.authentication_services");
if (setting != null && "SSL".equalsIgnoreCase(setting.toString())) {
public void disableSslSupport(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration,
Map<String, String> additionalProperties) {
final String property = additionalProperties.get("oracle.net.authentication_services");
if (property != null && "SSL".equalsIgnoreCase(property)) {
log.warnv(
"SSL support has been disabled, but one of the Oracle JDBC connections has been configured to use SSL. This will likely fail");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.quarkus.jdbc.postgresql.runtime;

import java.util.Map;

import io.agroal.api.configuration.supplier.AgroalDataSourceConfigurationSupplier;
import io.agroal.api.exceptionsorter.PostgreSQLExceptionSorter;
import io.quarkus.agroal.runtime.AgroalConnectionConfigurer;
Expand All @@ -10,7 +12,8 @@
public class PostgreSQLAgroalConnectionConfigurer implements AgroalConnectionConfigurer {

@Override
public void disableSslSupport(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration) {
public void disableSslSupport(String databaseKind, AgroalDataSourceConfigurationSupplier dataSourceConfiguration,
Map<String, String> additionalProperties) {
dataSourceConfiguration.connectionPoolConfiguration().connectionFactoryConfiguration().jdbcProperty("sslmode",
"disable");
}
Expand Down

0 comments on commit 4367b5f

Please sign in to comment.