package org.dayatang.mysql.jdbc; import com.mysql.jdbc.NonRegisteringDriver; import java.sql.Connection; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.util.Properties; import java.util.StringTokenizer; import java.util.logging.Logger; public class GeminiNonRegisteringReplicationDriver extends NonRegisteringDriver { public GeminiNonRegisteringReplicationDriver() throws SQLException { super(); } /* * (non-Javadoc) * * @see java.sql.Driver#connect(java.lang.String, java.util.Properties) */ public Connection connect(String url, Properties info) throws SQLException { Properties parsedProps = parseURL(url, info); if (parsedProps == null) { return null; } Properties masterProps = (Properties) parsedProps.clone(); Properties slavesProps = (Properties) parsedProps.clone(); // Marker used for further testing later on, also when // debugging slavesProps.setProperty("com.mysql.jdbc.ReplicationConnection.isSlave", "true"); String hostValues = parsedProps.getProperty(HOST_PROPERTY_KEY); if (hostValues != null) { StringTokenizer st = new StringTokenizer(hostValues, ","); StringBuffer masterHost = new StringBuffer(); StringBuffer slaveHosts = new StringBuffer(); if (st.hasMoreTokens()) { String[] hostPortPair = parseHostPortPair(st.nextToken()); if (hostPortPair[HOST_NAME_INDEX] != null) { masterHost.append(hostPortPair[HOST_NAME_INDEX]); } if (hostPortPair[PORT_NUMBER_INDEX] != null) { masterHost.append(":"); masterHost.append(hostPortPair[PORT_NUMBER_INDEX]); } } boolean firstSlaveHost = true; while (st.hasMoreTokens()) { String[] hostPortPair = parseHostPortPair(st.nextToken()); if (!firstSlaveHost) { slaveHosts.append(","); } else { firstSlaveHost = false; } if (hostPortPair[HOST_NAME_INDEX] != null) { slaveHosts.append(hostPortPair[HOST_NAME_INDEX]); } if (hostPortPair[PORT_NUMBER_INDEX] != null) { slaveHosts.append(":"); slaveHosts.append(hostPortPair[PORT_NUMBER_INDEX]); } } // if (slaveHosts.length() == 0) { // throw SQLError // .createSQLException( // "Must specify at least one slave host to connect to for master/slave replication load-balancing functionality", // SQLError.SQL_STATE_INVALID_CONNECTION_ATTRIBUTE); // } masterProps.setProperty(HOST_PROPERTY_KEY, masterHost.toString()); slavesProps.setProperty(HOST_PROPERTY_KEY, slaveHosts.toString()); } return new GeminiReplicationConnection(masterProps, slavesProps); } //For JDK 7 compatability public Logger getParentLogger() throws SQLFeatureNotSupportedException { return null; } }