KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > mysql > jdbc > integration > jboss > MysqlValidConnectionChecker


1 /*
2  Copyright (C) 2002-2005 MySQL AB
3
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of version 2 of the GNU General Public License as
6  published by the Free Software Foundation.
7
8  There are special exceptions to the terms and conditions of the GPL
9  as it is applied to this software. View the full text of the
10  exception in file EXCEPTIONS-CONNECTOR-J in the directory of this
11  software distribution.
12
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21  */

22
23 package com.mysql.jdbc.integration.jboss;
24
25 import java.io.Serializable JavaDoc;
26 import java.lang.reflect.Method JavaDoc;
27 import java.sql.Connection JavaDoc;
28 import java.sql.SQLException JavaDoc;
29 import java.sql.Statement JavaDoc;
30
31 import org.jboss.resource.adapter.jdbc.ValidConnectionChecker;
32
33 /**
34  * A more efficient connection checker for JBoss.
35  *
36  * @version $Id: MysqlValidConnectionChecker.java,v 1.1.2.1 2005/05/13 18:58:42
37  * mmatthews Exp $
38  */

39 public final class MysqlValidConnectionChecker implements
40         ValidConnectionChecker, Serializable JavaDoc {
41
42     private static final long serialVersionUID = 3258689922776119348L;
43
44     private Method JavaDoc pingMethod;
45
46     private final static Object JavaDoc[] NO_ARGS_OBJECT_ARRAY = new Object JavaDoc[0];
47
48     public MysqlValidConnectionChecker() {
49         try {
50             // Avoid classloader goofiness
51
Class JavaDoc mysqlConnection = Thread.currentThread()
52                     .getContextClassLoader().loadClass(
53                             "com.mysql.jdbc.Connection");
54
55             pingMethod = mysqlConnection.getMethod("ping", null);
56         } catch (Exception JavaDoc ex) {
57             // Punt, we'll use 'SELECT 1' to do the check
58
}
59     }
60
61     /*
62      * (non-Javadoc)
63      *
64      * @see org.jboss.resource.adapter.jdbc.ValidConnectionChecker#isValidConnection(java.sql.Connection)
65      */

66     public SQLException JavaDoc isValidConnection(Connection JavaDoc conn) {
67         if (pingMethod != null) {
68             try {
69                 this.pingMethod.invoke(conn, NO_ARGS_OBJECT_ARRAY);
70
71                 return null;
72             } catch (Exception JavaDoc ex) {
73                 if (ex instanceof SQLException JavaDoc) {
74                     return (SQLException JavaDoc) ex;
75                 }
76
77                 return new SQLException JavaDoc("Ping failed: " + ex.toString());
78             }
79         }
80
81         // Punt and use 'SELECT 1'
82

83         Statement JavaDoc pingStatement = null;
84
85         try {
86             pingStatement.executeQuery("SELECT 1").close();
87
88             return null;
89         } catch (SQLException JavaDoc sqlEx) {
90             return sqlEx;
91         } finally {
92             if (pingStatement != null) {
93                 try {
94                     pingStatement.close();
95                 } catch (SQLException JavaDoc sqlEx) {
96                     // can't do anything about it here
97
}
98             }
99         }
100     }
101 }
102
Popular Tags