Connection Pool Example
Code Snippet –
import java.sql.Connection;
import
java.sql.DriverManager;
import
java.sql.SQLException;
import
java.util.concurrent.BlockingQueue;
import
java.util.concurrent.LinkedBlockingQueue;
/**
* @author Manoj
*/
public class ConnectionPool {
private
BlockingQueue<Connection> connectionPoolQueue;
private int maximumPoolSize;
private int initialPoolSize;
private int currentPoolSize;
private String dbUrl;
private String dbUser;
private String dbPassword;
public ConnectionPool(int maxPoolSize, int initialPoolSize, String url, String username, String password,
String
driverClassName) throws
ClassNotFoundException, SQLException {
if ((initialPoolSize > maxPoolSize) || initialPoolSize < 1 || maxPoolSize < 1) {
throw new
IllegalArgumentException("Invalid pool size parameters");
}
this.maximumPoolSize = maxPoolSize > 0 ? maxPoolSize : 10;
this.initialPoolSize = initialPoolSize;
this.dbUrl = url;
this.dbUser = username;
this.dbPassword = password;
this.connectionPoolQueue = new
LinkedBlockingQueue<Connection>(maxPoolSize);
initializeConnectionPool(driverClassName);
}
private void
initializeConnectionPool(String driverClassName) throws
ClassNotFoundException, SQLException {
Class.forName(driverClassName);
for (int i = 0; i < initialPoolSize; i++) {
openAndPoolConnection();
}
}
private synchronized void
openAndPoolConnection() throws SQLException {
if (currentPoolSize == maximumPoolSize) {
return;
}
Connection
conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
connectionPoolQueue.offer(new PooledConnection(conn, this));
currentPoolSize++;
}
public Connection
borrowConnection() throws InterruptedException, SQLException {
if (currentPoolSize < maximumPoolSize) {
openAndPoolConnection();
}
return connectionPoolQueue.take();
}
public void
surrenderConnection(Connection conn) {
if (!(conn instanceof PooledConnection)) {
return;
}
connectionPoolQueue.offer(conn);
}
}
In above code PooledConnection.java is an implementation of Connection
interface
Code
Snippet-
public class PooledConnection implements Connection {
private Connection coreConnection;
private ConnectionPool connectionPool;
public
PooledConnection(Connection coreConnection, ConnectionPool connectionPool) {
this.connectionPool = connectionPool;
this.coreConnection = coreConnection;
}
@Override
public void close() throws SQLException {
connectionPool.surrenderConnection(this);
}
……..
all default method implementation of Connection interface…
Please refer below link for more details:
https://github.com/sharmaak/crashlabs/tree/master/MinimalConnectionPool/com/amitcodes/dbcp
Please refer below link for more details:
https://github.com/sharmaak/crashlabs/tree/master/MinimalConnectionPool/com/amitcodes/dbcp
very usefull in full details thanks
ReplyDelete