diff --git a/src/main/java/com/alibaba/druid/pool/PoolableConnection.java b/src/main/java/com/alibaba/druid/pool/PoolableConnection.java index 2771f4d6a1..5bd5ef09f5 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolableConnection.java +++ b/src/main/java/com/alibaba/druid/pool/PoolableConnection.java @@ -44,6 +44,7 @@ import com.alibaba.druid.logging.Log; import com.alibaba.druid.logging.LogFactory; import com.alibaba.druid.pool.PoolablePreparedStatement.PreparedStatementKey; import com.alibaba.druid.pool.PreparedStatementPool.MethodType; +import com.alibaba.druid.util.OracleUtils; import com.alibaba.druid.util.TransactionInfo; /** diff --git a/src/main/java/com/alibaba/druid/pool/PoolablePreparedStatement.java b/src/main/java/com/alibaba/druid/pool/PoolablePreparedStatement.java index 6b4365430b..952a315fc7 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolablePreparedStatement.java +++ b/src/main/java/com/alibaba/druid/pool/PoolablePreparedStatement.java @@ -38,6 +38,7 @@ import java.util.Arrays; import java.util.Calendar; import com.alibaba.druid.pool.PreparedStatementPool.MethodType; +import com.alibaba.druid.util.OracleUtils; /** * @author wenshao 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 ee811ad066..c3f54862a2 100644 --- a/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java +++ b/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java @@ -22,37 +22,24 @@ package com.alibaba.druid.pool.vendor; 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 com.alibaba.druid.logging.Log; import com.alibaba.druid.logging.LogFactory; import com.alibaba.druid.pool.PoolableConnection; import com.alibaba.druid.pool.ValidConnectionChecker; import com.alibaba.druid.proxy.jdbc.ConnectionProxy; -import com.alibaba.druid.util.DruidLoaderUtils; -import com.alibaba.druid.util.JdbcUtils; +import com.alibaba.druid.util.OracleUtils; public class OracleValidConnectionChecker 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 final Class clazz; - private final Method ping; - private final static Object[] params = new Object[] { new Integer(5000) }; + private static final Log LOG = LogFactory.getLog(OracleValidConnectionChecker.class); public OracleValidConnectionChecker(){ - try { - clazz = DruidLoaderUtils.loadClass("oracle.jdbc.driver.OracleConnection"); - ping = clazz.getMethod("pingDatabase", new Class[] { Integer.TYPE }); - } catch (Exception e) { - throw new RuntimeException("Unable to resolve pingDatabase method:", e); - } + } public boolean isValidConnection(Connection conn, String valiateQuery, int validationQueryTimeout) { @@ -78,33 +65,14 @@ public class OracleValidConnectionChecker implements ValidConnectionChecker, Ser conn = ((ConnectionProxy) conn).getConnectionRaw(); } - // unwrap - if (clazz.isAssignableFrom(conn.getClass())) { - Integer status = (Integer) ping.invoke(conn, params); + int status = OracleUtils.pingDatabase(conn); - // Error - if (status.intValue() < 0) { - return false; - } - - return true; + // Error + if (status < 0) { + return false; } - Statement stmt = null; - ResultSet rs = null; - try { - stmt = conn.createStatement(); - rs = stmt.executeQuery(valiateQuery); - return true; - } catch (SQLException e) { - return false; - } catch (Exception e) { - LOG.warn("Unexpected error in ping", e); - return false; - } finally { - JdbcUtils.close(rs); - JdbcUtils.close(stmt); - } + return true; } catch (Exception e) { LOG.warn("Unexpected error in pingDatabase", e); } diff --git a/src/main/java/com/alibaba/druid/pool/OracleUtils.java b/src/main/java/com/alibaba/druid/util/OracleUtils.java similarity index 69% rename from src/main/java/com/alibaba/druid/pool/OracleUtils.java rename to src/main/java/com/alibaba/druid/util/OracleUtils.java index c9cb0bd221..97f1efedd9 100644 --- a/src/main/java/com/alibaba/druid/pool/OracleUtils.java +++ b/src/main/java/com/alibaba/druid/util/OracleUtils.java @@ -1,9 +1,11 @@ -package com.alibaba.druid.pool; +package com.alibaba.druid.util; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; +import com.alibaba.druid.pool.PoolablePreparedStatement; + import oracle.jdbc.OracleConnection; import oracle.jdbc.OracleStatement; @@ -38,9 +40,19 @@ public class OracleUtils { OracleConnection oracleConn = conn.unwrap(OracleConnection.class); oracleConn.cancel(); } - - public static void pingDatabase(Connection conn) throws SQLException { + + public static int pingDatabase(Connection conn) throws SQLException { OracleConnection oracleConn = conn.unwrap(OracleConnection.class); - oracleConn.pingDatabase(); + return oracleConn.pingDatabase(); + } + + public static void openProxySession(Connection conn, int type, java.util.Properties prop) throws SQLException { + OracleConnection oracleConn = conn.unwrap(OracleConnection.class); + oracleConn.openProxySession(type, prop); + } + + public static int getDefaultExecuteBatch(Connection conn) throws SQLException { + OracleConnection oracleConn = conn.unwrap(OracleConnection.class); + return oracleConn.getDefaultExecuteBatch(); } }