From cb7424b798f10b1237d1d58f58b6daae9b05d93b Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 29 Jun 2011 05:54:51 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ExceptionSorter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@297 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../druid/pool/vendor/ExceptionSorter.java | 17 +++++++ .../pool/vendor/MySqlExceptionSorter.java | 47 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 src/main/java/com/alibaba/druid/pool/vendor/ExceptionSorter.java create mode 100644 src/main/java/com/alibaba/druid/pool/vendor/MySqlExceptionSorter.java diff --git a/src/main/java/com/alibaba/druid/pool/vendor/ExceptionSorter.java b/src/main/java/com/alibaba/druid/pool/vendor/ExceptionSorter.java new file mode 100644 index 0000000000..2968b15ff1 --- /dev/null +++ b/src/main/java/com/alibaba/druid/pool/vendor/ExceptionSorter.java @@ -0,0 +1,17 @@ +package com.alibaba.druid.pool.vendor; + +import java.sql.SQLException; + +/** + * An interface to allow for exception evaluation. + */ +public interface ExceptionSorter { + + /** + * Returns true or false whether or not the exception is fatal. + * + * @param e the exception + * @return true or false if the exception is fatal. + */ + boolean isExceptionFatal(SQLException e); +} diff --git a/src/main/java/com/alibaba/druid/pool/vendor/MySqlExceptionSorter.java b/src/main/java/com/alibaba/druid/pool/vendor/MySqlExceptionSorter.java new file mode 100644 index 0000000000..cec7af8206 --- /dev/null +++ b/src/main/java/com/alibaba/druid/pool/vendor/MySqlExceptionSorter.java @@ -0,0 +1,47 @@ +package com.alibaba.druid.pool.vendor; + +import java.sql.SQLException; + +public class MySqlExceptionSorter implements ExceptionSorter { + + @Override + public boolean isExceptionFatal(SQLException e) { + String state = e.getSQLState(); + if (state != null && state.startsWith("08")) { // per Mark Matthews at MySQL + return true; + } + + final int errorCode = e.getErrorCode(); + switch (errorCode) { + // Communications Errors + case 1040: // ER_CON_COUNT_ERROR + case 1042: // ER_BAD_HOST_ERROR + case 1043: // ER_HANDSHAKE_ERROR + case 1047: // ER_UNKNOWN_COM_ERROR + case 1081: // ER_IPSOCK_ERROR + case 1129: // ER_HOST_IS_BLOCKED + case 1130: // ER_HOST_NOT_PRIVILEGED + + // Authentication Errors + case 1045: // ER_ACCESS_DENIED_ERROR + + // Resource errors + case 1004: // ER_CANT_CREATE_FILE + case 1005: // ER_CANT_CREATE_TABLE + case 1015: // ER_CANT_LOCK + case 1021: // ER_DISK_FULL + case 1041: // ER_OUT_OF_RESOURCES + + // Out-of-memory errors + case 1037: // ER_OUTOFMEMORY + case 1038: // ER_OUT_OF_SORTMEMORY + return true; + + default: + break; + } + + return false; + } + +}