From 048047182963642cde9bb89106dedeff217d9909 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 3 Dec 2014 03:32:48 +0800 Subject: [PATCH] change oracle valid connection impl --- .../vendor/OracleValidConnectionChecker.java | 58 +++++++------------ 1 file changed, 21 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java b/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java index 0e7a77f055..7c03441a3c 100644 --- a/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java +++ b/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java @@ -15,6 +15,13 @@ */ package com.alibaba.druid.pool.vendor; +import java.io.Serializable; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Properties; + import com.alibaba.druid.pool.DruidPooledConnection; import com.alibaba.druid.pool.ValidConnectionChecker; import com.alibaba.druid.pool.ValidConnectionCheckerAdapter; @@ -22,41 +29,21 @@ import com.alibaba.druid.proxy.jdbc.ConnectionProxy; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; import com.alibaba.druid.util.JdbcUtils; -import com.alibaba.druid.util.Utils; - -import java.io.Serializable; -import java.lang.reflect.Method; -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.Properties; public class OracleValidConnectionChecker extends ValidConnectionCheckerAdapter implements ValidConnectionChecker, Serializable { - private static final long serialVersionUID = -2227528634302168877L; + private static final long serialVersionUID = -2227528634302168877L; - private static final Log LOG = LogFactory.getLog(OracleValidConnectionChecker.class); + private static final Log LOG = LogFactory.getLog(OracleValidConnectionChecker.class); - private final Class clazz; - private final Method ping; - private final static Object[] params = new Object[] { new Integer(5000) }; + private int timeout = 1; + + private String defaultValidateQuery = "SELECT 'x' FROM DUAL"; public OracleValidConnectionChecker(){ - try { - clazz = Utils.loadClass("oracle.jdbc.driver.OracleConnection"); - if (clazz != null) { - ping = clazz.getMethod("pingDatabase", new Class[] { Integer.TYPE }); - } else { - ping = null; - } - } catch (Exception e) { - throw new RuntimeException("Unable to resolve pingDatabase method:", e); - } - configFromProperties(System.getProperties()); } - + @Override public void configFromProperties(Properties properties) { String property = properties.getProperty("druid.oracle.pingTimeout"); @@ -65,12 +52,16 @@ public class OracleValidConnectionChecker extends ValidConnectionCheckerAdapter setTimeout(value); } } - - public void setTimeout(int timeout) { - params[0] = timeout; + + public void setTimeout(int seconds) { + this.timeout = seconds; } public boolean isValidConnection(Connection conn, String validateQuery, int validationQueryTimeout) { + if (validateQuery == null || validateQuery.isEmpty()) { + validateQuery = this.defaultValidateQuery; + } + try { if (conn.isClosed()) { return false; @@ -89,18 +80,11 @@ public class OracleValidConnectionChecker extends ValidConnectionCheckerAdapter conn = ((ConnectionProxy) conn).getRawObject(); } - // unwrap - if (clazz != null && clazz.isAssignableFrom(conn.getClass())) { - Integer status = (Integer) ping.invoke(conn, params); - - // Error - return status >= 0; - } - Statement stmt = null; ResultSet rs = null; try { stmt = conn.createStatement(); + stmt.setQueryTimeout(timeout); rs = stmt.executeQuery(validateQuery); return true; } catch (SQLException e) {