Minor cleanup (removal of redundant code). Testing JDBC 4.1 via getNetworkTimeout() is not viable on some drivers, but checking setNetworkTimeout() is.

pull/190/head
Brett Wooldridge 11 years ago
parent 5645839a7e
commit ca054975da

@ -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.getTransactionIsolation;
import static com.zaxxer.hikari.util.PoolUtilities.initializeDataSource; import static com.zaxxer.hikari.util.PoolUtilities.initializeDataSource;
import static com.zaxxer.hikari.util.PoolUtilities.isJdbc40Compliant; 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.quietlyCloseConnection;
import static com.zaxxer.hikari.util.PoolUtilities.quietlySleep; import static com.zaxxer.hikari.util.PoolUtilities.quietlySleep;
import static com.zaxxer.hikari.util.PoolUtilities.setLoginTimeout; import static com.zaxxer.hikari.util.PoolUtilities.setLoginTimeout;
@ -419,13 +418,12 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener
try { try {
connection = (username == null && password == null) ? dataSource.getConnection() : dataSource.getConnection(username, password); 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; isUseJdbc4Validation = isJdbc40Compliant(connection) && configuration.getConnectionTestQuery() == null;
if (!isUseJdbc4Validation && configuration.getConnectionTestQuery() == null) { if (!isUseJdbc4Validation && configuration.getConnectionTestQuery() == null) {
LOGGER.error("JDBC4 Connection.isValid() method not supported, connection test query must be configured"); 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 long timeoutMs = timeoutEnabled ? Math.max(250L, connectionTimeout) : 0L;
final int originalTimeout = setNetworkTimeout(houseKeepingExecutorService, connection, timeoutMs, isUseNetworkTimeout); final int originalTimeout = setNetworkTimeout(houseKeepingExecutorService, connection, timeoutMs, isUseNetworkTimeout);

@ -252,35 +252,6 @@ public final class PoolUtilities
return IS_JDBC40; 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. * 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 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 { try {
final int networkTimeout = connection.getNetworkTimeout(); final int networkTimeout = connection.getNetworkTimeout();
connection.setNetworkTimeout(executor, (int) timeoutMs); connection.setNetworkTimeout(executor, (int) timeoutMs);

@ -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.getTransactionIsolation;
import static com.zaxxer.hikari.util.PoolUtilities.initializeDataSource; import static com.zaxxer.hikari.util.PoolUtilities.initializeDataSource;
import static com.zaxxer.hikari.util.PoolUtilities.isJdbc40Compliant; 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.quietlyCloseConnection;
import static com.zaxxer.hikari.util.PoolUtilities.quietlySleep; import static com.zaxxer.hikari.util.PoolUtilities.quietlySleep;
import static com.zaxxer.hikari.util.PoolUtilities.setLoginTimeout; import static com.zaxxer.hikari.util.PoolUtilities.setLoginTimeout;
@ -399,15 +398,14 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener
try { try {
connection = (username == null && password == null) ? dataSource.getConnection() : dataSource.getConnection(username, password); 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; isUseJdbc4Validation = isJdbc40Compliant(connection) && configuration.getConnectionTestQuery() == null;
if (!isUseJdbc4Validation && configuration.getConnectionTestQuery() == null) { if (!isUseJdbc4Validation && configuration.getConnectionTestQuery() == null) {
LOGGER.error("JDBC4 Connection.isValid() method not supported, connection test query must be configured"); 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 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); transactionIsolation = (transactionIsolation < 0 ? connection.getTransactionIsolation() : transactionIsolation);

@ -228,29 +228,6 @@ public final class PoolUtilities
return IS_JDBC40; 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. * 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 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 { try {
final int networkTimeout = connection.getNetworkTimeout(); final int networkTimeout = connection.getNetworkTimeout();
connection.setNetworkTimeout(executor, (int) timeoutMs); connection.setNetworkTimeout(executor, (int) timeoutMs);

Loading…
Cancel
Save