Connection pooling is nothing but a pool of same connection objects available to improve the performance (in case to reduce the overhead of connection creation with each call).
Following example shows the implementation of database connection pooling :
Following example shows the implementation of database connection pooling :
package pool; import java.sql.*; import java.util.*; import java.io.*; class ConnectionReaper extends Thread { private JDCConnectionPool pool; private final long delay=300000; ConnectionReaper(JDCConnectionPool pool) { this.pool=pool; } public void run() { while(true) { try { sleep(delay); } catch( InterruptedException e) { } pool.reapConnections(); } } } public class JDCConnectionPool { private Vector connections; private String url, user, password; final private long timeout=60000; private ConnectionReaper reaper; final private int poolsize=10; public JDCConnectionPool(String url, String user, String password) { this.url = url; this.user = user; this.password = password; connections = new Vector(poolsize); reaper = new ConnectionReaper(this); reaper.start(); } public synchronized void reapConnections() { long stale = System.currentTimeMillis() - timeout; Enumeration connlist = connections.elements(); while((connlist != null) && (connlist.hasMoreElements())) { JDCConnection conn = (JDCConnection)connlist.nextElement(); if((conn.inUse()) && (stale >conn.getLastUse()) && (!conn.validate())) { removeConnection(conn); } } } public synchronized void closeConnections() { Enumeration connlist = connections.elements(); while((connlist != null) && (connlist.hasMoreElements())) { JDCConnection conn = (JDCConnection)connlist.nextElement(); removeConnection(conn); } } private synchronized void removeConnection(JDCConnection conn) { connections.removeElement(conn); } public synchronized Connection getConnection() throws SQLException { JDCConnection c; for(int i = 0; i < connections.size(); i++) { c = (JDCConnection)connections.elementAt(i); if (c.lease()) { return c; } } Connection conn = DriverManager.getConnection(url, user, password); c = new JDCConnection(conn, this); c.lease(); connections.addElement(c); return c; } public synchronized void returnConnection(JDCConnection conn) { conn.expireLease(); } }
No comments:
Post a Comment