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