From ca054975daa0540be4347b973712cc9b374e5565 Mon Sep 17 00:00:00 2001 From: Brett Wooldridge Date: Tue, 11 Nov 2014 12:17:14 +0900 Subject: [PATCH] Minor cleanup (removal of redundant code). Testing JDBC 4.1 via getNetworkTimeout() is not viable on some drivers, but checking setNetworkTimeout() is. --- .../com/zaxxer/hikari/pool/HikariPool.java | 4 +-- .../com/zaxxer/hikari/util/PoolUtilities.java | 33 ++----------------- .../com/zaxxer/hikari/pool/HikariPool.java | 6 ++-- .../com/zaxxer/hikari/util/PoolUtilities.java | 27 ++------------- 4 files changed, 9 insertions(+), 61 deletions(-) diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index 9c9e5c09..e5e70b0f 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -29,7 +29,6 @@ import static com.zaxxer.hikari.util.PoolUtilities.executeSql; import static com.zaxxer.hikari.util.PoolUtilities.getTransactionIsolation; import static com.zaxxer.hikari.util.PoolUtilities.initializeDataSource; import static com.zaxxer.hikari.util.PoolUtilities.isJdbc40Compliant; -import static com.zaxxer.hikari.util.PoolUtilities.isJdbc41Compliant; import static com.zaxxer.hikari.util.PoolUtilities.quietlyCloseConnection; import static com.zaxxer.hikari.util.PoolUtilities.quietlySleep; import static com.zaxxer.hikari.util.PoolUtilities.setLoginTimeout; @@ -419,13 +418,12 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener try { connection = (username == null && password == null) ? dataSource.getConnection() : dataSource.getConnection(username, password); - final boolean timeoutEnabled = (connectionTimeout != Integer.MAX_VALUE); - isUseNetworkTimeout = isJdbc41Compliant(connection) && timeoutEnabled; isUseJdbc4Validation = isJdbc40Compliant(connection) && configuration.getConnectionTestQuery() == null; if (!isUseJdbc4Validation && configuration.getConnectionTestQuery() == null) { LOGGER.error("JDBC4 Connection.isValid() method not supported, connection test query must be configured"); } + final boolean timeoutEnabled = (connectionTimeout != Integer.MAX_VALUE); final long timeoutMs = timeoutEnabled ? Math.max(250L, connectionTimeout) : 0L; final int originalTimeout = setNetworkTimeout(houseKeepingExecutorService, connection, timeoutMs, isUseNetworkTimeout); diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java index fba67e2a..e9cf4598 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java @@ -252,35 +252,6 @@ public final class PoolUtilities return IS_JDBC40; } - /** - * Return true if the driver appears to be JDBC 4.1 compliant. - * - * @param connection a Connection to check - * @return true if JDBC 4.1 compliance, false otherwise - * @throws SQLException re-thrown exception from Connection.getNetworkTimeout() - */ - public static boolean isJdbc41Compliant(final Connection connection) throws SQLException - { - if (!jdbc41checked) { - jdbc41checked = true; - - try { - IS_JDBC41 = connection.getNetworkTimeout() != Integer.MIN_VALUE; // This will throw AbstractMethodError or SQLException in the case of a non-JDBC 41 compliant driver - } - catch (SQLFeatureNotSupportedException e) { - IS_JDBC41 = false; - } - catch (AbstractMethodError e) { - IS_JDBC41 = false; - } - catch (NoSuchMethodError e) { - IS_JDBC41 = false; - } - } - - return IS_JDBC41; - } - /** * Set the query timeout, if it is supported by the driver. * @@ -319,7 +290,9 @@ public final class PoolUtilities */ public static int setNetworkTimeout(final Executor executor, final Connection connection, final long timeoutMs, final boolean isUseNetworkTimeout) throws SQLException { - if (isUseNetworkTimeout) { + if ((IS_JDBC41 || !jdbc41checked) && isUseNetworkTimeout) { + jdbc41checked = true; + try { final int networkTimeout = connection.getNetworkTimeout(); connection.setNetworkTimeout(executor, (int) timeoutMs); diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/hikaricp/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index dda1c928..3a6f3568 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -28,7 +28,6 @@ import static com.zaxxer.hikari.util.PoolUtilities.executeSql; import static com.zaxxer.hikari.util.PoolUtilities.getTransactionIsolation; import static com.zaxxer.hikari.util.PoolUtilities.initializeDataSource; import static com.zaxxer.hikari.util.PoolUtilities.isJdbc40Compliant; -import static com.zaxxer.hikari.util.PoolUtilities.isJdbc41Compliant; import static com.zaxxer.hikari.util.PoolUtilities.quietlyCloseConnection; import static com.zaxxer.hikari.util.PoolUtilities.quietlySleep; import static com.zaxxer.hikari.util.PoolUtilities.setLoginTimeout; @@ -399,15 +398,14 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener try { connection = (username == null && password == null) ? dataSource.getConnection() : dataSource.getConnection(username, password); - final boolean timeoutEnabled = (connectionTimeout != Integer.MAX_VALUE); - isUseNetworkTimeout = isJdbc41Compliant(connection) && timeoutEnabled; isUseJdbc4Validation = isJdbc40Compliant(connection) && configuration.getConnectionTestQuery() == null; if (!isUseJdbc4Validation && configuration.getConnectionTestQuery() == null) { LOGGER.error("JDBC4 Connection.isValid() method not supported, connection test query must be configured"); } + final boolean timeoutEnabled = (connectionTimeout != Integer.MAX_VALUE); final long timeoutMs = timeoutEnabled ? Math.max(250L, connectionTimeout) : 0L; - final int originalTimeout = setNetworkTimeout(houseKeepingExecutorService, connection, timeoutMs, isUseNetworkTimeout); + final int originalTimeout = setNetworkTimeout(houseKeepingExecutorService, connection, timeoutMs, timeoutEnabled); transactionIsolation = (transactionIsolation < 0 ? connection.getTransactionIsolation() : transactionIsolation); diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java b/hikaricp/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java index 01315268..a08b9239 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java @@ -228,29 +228,6 @@ public final class PoolUtilities return IS_JDBC40; } - /** - * Return true if the driver appears to be JDBC 4.1 compliant. - * - * @param connection a Connection to check - * @return true if JDBC 4.1 compliance, false otherwise - * @throws SQLException re-thrown exception from Connection.getNetworkTimeout() - */ - public static boolean isJdbc41Compliant(final Connection connection) throws SQLException - { - if (!jdbc41checked) { - jdbc41checked = true; - - try { - IS_JDBC41 = connection.getNetworkTimeout() != Integer.MIN_VALUE; // This will throw AbstractMethodError or SQLException in the case of a non-JDBC 41 compliant driver - } - catch (NoSuchMethodError | AbstractMethodError | SQLFeatureNotSupportedException e) { - IS_JDBC41 = false; - } - } - - return IS_JDBC41; - } - /** * Set the query timeout, if it is supported by the driver. * @@ -283,7 +260,9 @@ public final class PoolUtilities */ public static int setNetworkTimeout(final Executor executor, final Connection connection, final long timeoutMs, final boolean isUseNetworkTimeout) throws SQLException { - if (isUseNetworkTimeout) { + if ((IS_JDBC41 || !jdbc41checked) && isUseNetworkTimeout) { + jdbc41checked = true; + try { final int networkTimeout = connection.getNetworkTimeout(); connection.setNetworkTimeout(executor, (int) timeoutMs);