diff --git a/src/main/java/com/alibaba/druid/pool/vendor/MSSQLValidConnectionChecker.java b/src/main/java/com/alibaba/druid/pool/vendor/MSSQLValidConnectionChecker.java index 32b5ccbd0a..838d0696f3 100644 --- a/src/main/java/com/alibaba/druid/pool/vendor/MSSQLValidConnectionChecker.java +++ b/src/main/java/com/alibaba/druid/pool/vendor/MSSQLValidConnectionChecker.java @@ -1,66 +1,69 @@ -/* - * Copyright 1999-2011 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.pool.vendor; - -import java.io.Serializable; -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; - -import com.alibaba.druid.pool.ValidConnectionChecker; -import com.alibaba.druid.pool.ValidConnectionCheckerAdapter; -import com.alibaba.druid.support.logging.Log; -import com.alibaba.druid.support.logging.LogFactory; -import com.alibaba.druid.util.JdbcUtils; - -/** - * A MSSQLValidConnectionChecker. - */ -public class MSSQLValidConnectionChecker extends ValidConnectionCheckerAdapter implements ValidConnectionChecker, Serializable { - - private static final long serialVersionUID = 1L; - - private static final String QUERY = "SELECT 1"; - private static final Log LOG = LogFactory.getLog(MSSQLValidConnectionChecker.class); - - public boolean isValidConnection(final Connection c, String valiateQuery, int validationQueryTimeout) { - try { - if (c.isClosed()) { - return false; - } - } catch (SQLException ex) { - // skip - return false; - } - - Statement stmt = null; - - try { - stmt = c.createStatement(); - stmt.setQueryTimeout(validationQueryTimeout); - stmt.execute(QUERY); - return true; - } catch (SQLException e) { - if (LOG.isWarnEnabled()) { - LOG.warn("warning: connection validation failed for current managed connection."); - } - return false; - } finally { - JdbcUtils.close(stmt); - } - } - -} +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.pool.vendor; + +import java.io.Serializable; +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; + +import com.alibaba.druid.pool.ValidConnectionChecker; +import com.alibaba.druid.pool.ValidConnectionCheckerAdapter; +import com.alibaba.druid.support.logging.Log; +import com.alibaba.druid.support.logging.LogFactory; +import com.alibaba.druid.util.JdbcUtils; + +/** + * A MSSQLValidConnectionChecker. + */ +public class MSSQLValidConnectionChecker extends ValidConnectionCheckerAdapter implements ValidConnectionChecker, Serializable { + + private static final long serialVersionUID = 1L; + + private static final Log LOG = LogFactory.getLog(MSSQLValidConnectionChecker.class); + + public MSSQLValidConnectionChecker(){ + + } + + public boolean isValidConnection(final Connection c, String valiateQuery, int validationQueryTimeout) { + try { + if (c.isClosed()) { + return false; + } + } catch (SQLException ex) { + // skip + return false; + } + + Statement stmt = null; + + try { + stmt = c.createStatement(); + stmt.setQueryTimeout(validationQueryTimeout); + stmt.execute(valiateQuery); + return true; + } catch (SQLException e) { + if (LOG.isWarnEnabled()) { + LOG.warn("warning: connection validation failed for current managed connection."); + } + return false; + } finally { + JdbcUtils.close(stmt); + } + } + +} diff --git a/src/test/java/com/alibaba/druid/bvt/pool/vendor/MSSQLValidConnectionCheckerTest.java b/src/test/java/com/alibaba/druid/bvt/pool/vendor/MSSQLValidConnectionCheckerTest.java new file mode 100644 index 0000000000..4f6f525078 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/vendor/MSSQLValidConnectionCheckerTest.java @@ -0,0 +1,40 @@ +package com.alibaba.druid.bvt.pool.vendor; + +import java.sql.SQLException; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.mock.MockConnection; +import com.alibaba.druid.pool.vendor.MSSQLValidConnectionChecker; + +public class MSSQLValidConnectionCheckerTest extends TestCase { + + public void test_0() throws Exception { + MSSQLValidConnectionChecker checker = new MSSQLValidConnectionChecker(); + + MockConnection conn = new MockConnection(); + + Assert.assertTrue(checker.isValidConnection(conn, "select 1", 10)); + + } + + public void test_closed() throws Exception { + MSSQLValidConnectionChecker checker = new MSSQLValidConnectionChecker(); + + MockConnection conn = new MockConnection(); + + conn.close(); + Assert.assertFalse(checker.isValidConnection(conn, "select 1", 10)); + } + + public void test_error() throws Exception { + MSSQLValidConnectionChecker checker = new MSSQLValidConnectionChecker(); + + MockConnection conn = new MockConnection(); + conn.setError(new SQLException()); + + Assert.assertFalse(checker.isValidConnection(conn, "select 1", 10)); + } +}