From c0e9c52fbd6b4675b253ad2dd2cad38c3d8ac322 Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 15 Jul 2013 22:32:14 +0800 Subject: [PATCH] add exception sorter --- .../alibaba/druid/pool/DruidDataSource.java | 7 +++-- .../druid/pool/vendor/DB2ExceptionSorter.java | 27 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/pool/vendor/DB2ExceptionSorter.java diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 959f5826b0..93037037e4 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -54,6 +54,7 @@ import com.alibaba.druid.filter.Filter; import com.alibaba.druid.filter.FilterChainImpl; import com.alibaba.druid.mock.MockDriver; import com.alibaba.druid.pool.DruidPooledPreparedStatement.PreparedStatementKey; +import com.alibaba.druid.pool.vendor.DB2ExceptionSorter; import com.alibaba.druid.pool.vendor.InformixExceptionSorter; import com.alibaba.druid.pool.vendor.MSSQLValidConnectionChecker; import com.alibaba.druid.pool.vendor.MockExceptionSorter; @@ -853,9 +854,9 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat private void initExceptionSorter() { String realDriverClassName = driver.getClass().getName(); - if (realDriverClassName.equals("com.mysql.jdbc.Driver")) { + if (realDriverClassName.equals(JdbcConstants.MYSQL_DRIVER)) { this.exceptionSorter = new MySqlExceptionSorter(); - } else if (realDriverClassName.equals("oracle.jdbc.driver.OracleDriver")) { + } else if (realDriverClassName.equals(JdbcConstants.ORACLE_DRIVER)) { this.exceptionSorter = new OracleExceptionSorter(); } else if (realDriverClassName.equals("com.informix.jdbc.IfxDriver")) { this.exceptionSorter = new InformixExceptionSorter(); @@ -865,6 +866,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } else if (realDriverClassName.equals("com.alibaba.druid.mock.MockDriver")) { this.exceptionSorter = new MockExceptionSorter(); + } else if (realDriverClassName.equals(JdbcConstants.DB2_DRIVER)) { + this.exceptionSorter = new DB2ExceptionSorter(); } } diff --git a/src/main/java/com/alibaba/druid/pool/vendor/DB2ExceptionSorter.java b/src/main/java/com/alibaba/druid/pool/vendor/DB2ExceptionSorter.java new file mode 100644 index 0000000000..9660550527 --- /dev/null +++ b/src/main/java/com/alibaba/druid/pool/vendor/DB2ExceptionSorter.java @@ -0,0 +1,27 @@ +package com.alibaba.druid.pool.vendor; + +import java.sql.SQLException; +import java.util.Properties; + +import com.alibaba.druid.pool.ExceptionSorter; + +public class DB2ExceptionSorter implements ExceptionSorter { + + @Override + public boolean isExceptionFatal(SQLException e) { + int errorCode = e.getErrorCode(); + switch (errorCode) { // THE CURSOR IS NOT IN A PREPARED STATE + case -514: + return true; + default: + break; + } + return false; + } + + @Override + public void configFromProperties(Properties properties) { + + } + +}