import java.sql.*; import java.util.*; public class ConnectionPool { // private static ConnectionPool instance = new ConnectionPool(); // public static ConnectionPool getInstance(){ // return instance; // } private Hashtable connections; private int increment; private String dbURL, user, password; public ConnectionPool(String dbURL, String user, String password, String driverClassName, int initialConnections, int increment) throws SQLException, ClassNotFoundException { Class.forName(driverClassName); this.dbURL = dbURL; this.user = user; this.password = password; this.increment = increment; connections = new Hashtable(); for (int i = 0; i < initialConnections; i++){ connections.put(DriverManager.getConnection(dbURL, user, password),Boolean.FALSE); } } public Connection getConnection() throws SQLException{ System.out.println("Connection retrieved from the pool."); Connection con = null; Enumeration cons = connections.keys(); synchronized(connections){ while(cons.hasMoreElements()){ con = (Connection)cons.nextElement(); Boolean b = (Boolean)connections.get(con); if(b == Boolean.FALSE){ try{ con.setAutoCommit(true); } catch(SQLException e){ con = DriverManager.getConnection(dbURL, user, password); } connections.put(con, Boolean.TRUE); return con; } } } for(int i = 0; i < increment; i++){ connections.put(DriverManager.getConnection(dbURL, user, password), Boolean.FALSE); } return getConnection(); } public void returnConnection(Connection returned){ System.out.println("Connection returned to the pool."); Connection con; Enumeration cons = connections.keys(); while(cons.hasMoreElements()){ con = (Connection)cons.nextElement(); if(con == returned){ connections.put(con, Boolean.FALSE); break; } } } }