Logo Search packages:      
Sourcecode: mysql-connector-java version File versions  Download package

StandardLoadBalanceExceptionChecker.java

/*
  Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.

  The MySQL Connector/J is licensed under the terms of the GPLv2
  <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>, like most MySQL Connectors.
  There are special exceptions to the terms and conditions of the GPLv2 as it is applied to
  this software, see the FLOSS License Exception
  <http://www.mysql.com/about/legal/licensing/foss-exception.html>.

  This program is free software; you can redistribute it and/or modify it under the terms
  of the GNU General Public License as published by the Free Software Foundation; version 2
  of the License.

  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  See the GNU General Public License for more details.

  You should have received a copy of the GNU General Public License along with this
  program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth
  Floor, Boston, MA 02110-1301  USA
 
 */

package com.mysql.jdbc;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;

00032 public class StandardLoadBalanceExceptionChecker implements
            LoadBalanceExceptionChecker {
      
      private List sqlStateList;
      private List sqlExClassList;
      
00038       public boolean shouldExceptionTriggerFailover(SQLException ex) {
            String sqlState = ex.getSQLState();

            if (sqlState != null) {
                  if (sqlState.startsWith("08")) {
                        // connection error
                        return true;
                  }
                  if(this.sqlStateList != null){
                        // check against SQLState list
                        for(Iterator i = sqlStateList.iterator(); i.hasNext(); ){
                              if(sqlState.startsWith(i.next().toString())){
                                    return true;
                              }
                        }
                  }
            }
            
            // always handle CommunicationException
            if(ex instanceof CommunicationsException){
                  return true;
            }
            if(this.sqlExClassList != null){
                  // check against configured class lists
                  for(Iterator i = sqlExClassList.iterator(); i.hasNext(); ){
                        if(((Class)i.next()).isInstance(ex)){
                              return true;
                        }
                  }
            }
            // no matches
            return false;

      }

00073       public void destroy() {
            // TODO Auto-generated method stub

      }

00078       public void init(Connection conn, Properties props) throws SQLException {
            configureSQLStateList(props.getProperty("loadBalanceSQLStateFailover", null));
            configureSQLExceptionSubclassList(props.getProperty("loadBalanceSQLExceptionSubclassFailover", null));

      }
      
      private void configureSQLStateList(String sqlStates){
            if(sqlStates == null || "".equals(sqlStates)){
                  return;
            }
            List states = StringUtils.split(sqlStates, ",", true);
            List newStates = new ArrayList();
            Iterator i = states.iterator();
            
            while(i.hasNext()){
                  String state = i.next().toString();
                  if(state.length() > 0){
                        newStates.add(state);
                  }
            }
            if(newStates.size() > 0){
                  this.sqlStateList = newStates;
            }
            
      }
      private void configureSQLExceptionSubclassList(String sqlExClasses){
            if(sqlExClasses == null || "".equals(sqlExClasses)){
                  return;
            }
            List classes = StringUtils.split(sqlExClasses, ",", true);
            List newClasses = new ArrayList();
            Iterator i = classes.iterator();
            
            while(i.hasNext()){
                  String exClass = i.next().toString();
                  try{
                        Class c = Class.forName(exClass);
                        newClasses.add(c);
                  } catch (Exception e){ 
                        // ignore and don't check, class doesn't exist
                  }
            }
            if(newClasses.size() > 0){
                  this.sqlExClassList = newClasses;
            }
            
      }

}

Generated by  Doxygen 1.6.0   Back to index