Hi Friends,
I am using DBCP2 in my project and I am pleased with the performance of the
library. Though I am only able to provide a single mysql host in the
connection string. What do I need to do inorder to make the DBCP connection
pool replication aware ? I am going to use 1 master and 2 slaves in my
setup. Am I correct in assuming that its possible to create connection pool
over several mysql hosts ?

I tried to use the replication aware mysql jdbc driver
(com.mysql.jdbc.ReplicationDriver) but that doesn't seem to work and I am
getting an exception. Following is my test code

import org.apache.commons.dbcp2.BasicDataSource;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;

public class MyJdbcTest {
    public static void main(String[] args)  throws Exception {
        String connectionString =
"jdbc:mysql:replication://localhost,localhost/my_database";
        String driverName = "com.mysql.jdbc.ReplicationDriver";

        BasicDataSource ds = new BasicDataSource();
        ds.setDriverClassName(driverName);
        ds.setUsername("root");
        ds.setUrl(connectionString);

        Connection conn = ds.getConnection();
        Statement stmt = conn.createStatement();

        ResultSet resultSet = stmt.executeQuery("SELECT * FROM PERSONS
LIMIT 1");
        int numCols = resultSet.getMetaData().getColumnCount();

        while(resultSet.next()) {
            for(int i = 1; i < numCols ; i++) {
                System.out.println("\t" + resultSet.getString(i));
            }
        }
    }
}


Following is the exception that I am getting :

[error] (run-main-0) java.lang.AbstractMethodError:
com.mysql.jdbc.ReplicationConnection.isValid(I)Z
java.lang.AbstractMethodError:
com.mysql.jdbc.ReplicationConnection.isValid(I)Z
at
org.apache.commons.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:914)
at
org.apache.commons.dbcp2.PoolableConnection.validate(PoolableConnection.java:227)
at
org.apache.commons.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:303)
at
org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2165)
at
org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2148)
at
org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1903)
at
org.apache.commons.dbcp2.BasicDataSource$PaGetConnection.run(BasicDataSource.java:2267)
at
org.apache.commons.dbcp2.BasicDataSource$PaGetConnection.run(BasicDataSource.java:2263)
at java.security.AccessController.doPrivileged(Native Method)
at
org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1404)
at com.stumbleupon.pd.test.MyJdbcTest.main(MyJdbcTest.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)




-- 
Best,
Parth

Reply via email to