    All Packages  Class Hierarchy  This Package  Previous  Next  Index

# Class com.bitmechanic.sql.ConnectionPoolManager

    com.bitmechanic.sql.ConnectionPoolManager

public class ConnectionPoolManager

Implements java.sql.Driver and controls access to connections in the pool. Here's how to use it:

       // When your application starts, initialize the manager.  If you want
       // the pool to reap unused connections for you (recommended), then pass
       // an int to the constructor.  this tells the pool how many seconds to
       // wait between reaping connections in the pool.
       ConnectionPoolManager mgr = new ConnectionPoolManager(300);
       // Load the driver into the VM like you would do w/o the pool
       Class.forName("exgwe.sql.gweMysqlDriver").newInstance();
       // Add one alias to the pool for each JDBC datasource you wish to connect
       // to.  From this point forward any objects that need connection handles
       // do not need to know the url, username, or password of the databse.
       // They simply need the "alias" you named the pool with here
       mgr.addAlias("myalias", "exgwe.sql.gweMysqlDriver",
                    "jdbc:mysql://localhost:3306/mydb",
                    "username", "password",
                    10,  // max connections to open
                    300, // seconds a connection can be idle before it is closed
                    120, // seconds a connection can be checked out by a thread
                         // before it is returned back to the pool
                    30); // number of times a connection can be re-used before
                         // connection to database is closed and re-opened
                         // (optional parameter)
       // Later in your code, use the JDBC DriverManager to obtain a
       // connection manually
       Connection conn = DriverManager(ConnectionPoolManager.URL_PREFIX +
                                       "myalias", null, null);
       // Calling conn.close() returns the connection back to the pool
       conn.close();

You can also call methods on the pool directly if you want to gather statistics on the pool during runtime (to see if you need more connections in the pool for example):

       // First get a ref to the pool for the alias
       ConnectionPool pool = mgr.getPool("myalias");
       // Then call methods on it
       System.out.println(pool.getNumWaits() + " threads have had to wait() for
                          connection handles.");
       System.out.println("Connections have been checked out from the pool " +
                           pool.getNumRequests() + " times.");

Version:
  $Id: ConnectionPoolManager.java,v 1.5 1998/12/03 09:11:57 pixel Exp $
Author:
  James Cooper
See Also:
  ConnectionPool

##

URL_PREFIX

##

ConnectionPoolManager()
  Creates a pool that doesn't monitor itself to check for idle/stale connections.
ConnectionPoolManager(int)
  Creates a pool with a monitoring thread that checks the pool to make sure no connections are stale or idle.

##

acceptsURL(String)
  Returns true of url starts with URL_PREFIX
addAlias(ConnectionPool)
  Adds an alias to the pool using a supplied ConnectionPool object.
addAlias(String, String, String, String, String, int, int, int)
  Adds an alias to the pool.
addAlias(String, String, String, String, String, int, int, int, int)
  Adds an alias to the pool.
connect(String, Properties)
  Returns a connection from pool
getMajorVersion()
getMinorVersion()
getPool(String)
  Returns the pool with the supplied alias
getPools()
  Returns an Enumeration of the ConnectionPool objects currently created
getPropertyInfo(String, Properties)
jdbcCompliant()
  Always returns false since I haven't sent this code to Sun for approval
removeAlias(String)
  Closes all Connections in the pool with the supplied alias
run()
  Monitors each ConnectionPool and makes sure that no connection has gone idle or has been checked out for too long.
setTracing(boolean)
  Turns tracing on or off.

##

URL_PREFIX

     public static final String URL_PREFIX

##

ConnectionPoolManager

     public ConnectionPoolManager() throws SQLException

  Creates a pool that doesn't monitor itself to check for idle/stale connections. Use this constructor only if you know what you're doing and have a good reason to not use the monitor thread.

ConnectionPoolManager

     public ConnectionPoolManager(int monitorInterval) throws SQLException

  Creates a pool with a monitoring thread that checks the pool to make sure no connections are stale or idle.

  Parameters:
    monitorInterval - number of seconds between checks on the pool

##

addAlias

     public void addAlias(String alias,
                          String driver,
                          String url,
                          String username,
                          String password,
                          int maxConn,
                          int idleTimeout,
                          int checkoutTimeout) throws ClassNotFoundException, InstantiationException, IllegalAccessException

  Adds an alias to the pool. This does call Class.forName().newInstance() on the JDBC driver, so you don't have to call that yourself.

  idleTimeout and checkoutTimeout are expressed in seconds

  Parameters:
    alias - Name of the pool
    driver - Classname of JDBC driver to use
    url - JDBC URL to connect to
    username - JDBC username to connect as
    password - username's password in the database
    maxConn - Maximum number of connections to open; When this limit is reached, threads requesting a connection are queued until a connection becomes available
    idleTimeout - Maximum number of seconds a Connection can go unused before it is closed
    checkoutTimeout - Maximum number of seconds a Thread can checkout a Connection before it is closed and returned to the pool. This is a protection against the Thread dying and leaving the Connection checked out indefinately

addAlias

     public void addAlias(String alias,
                          String driver,
                          String url,
                          String username,
                          String password,
                          int maxConn,
                          int idleTimeout,
                          int checkoutTimeout,
                          int maxCheckout) throws ClassNotFoundException, InstantiationException, IllegalAccessException

  Adds an alias to the pool. This does call Class.forName().newInstance() on the JDBC driver, so you don't have to call that yourself.

  idleTimeout and checkoutTimeout are expressed in seconds

  Parameters:
    alias - Name of the pool
    driver - Classname of JDBC driver to use
    url - JDBC URL to connect to
    username - JDBC username to connect as
    password - username's password in the database
    maxConn - Maximum number of connections to open; When this limit is reached, threads requesting a connection are queued until a connection becomes available
    idleTimeout - Maximum number of seconds a Connection can go unused before it is closed
    checkoutTimeout - Maximum number of seconds a Thread can checkout a Connection before it is closed and returned to the pool. This is a protection against the Thread dying and leaving the Connection checked out indefinately
    maxCheckout - If this is greater than 0, the number of times a Connection may be checked out before it is closed. Used as a safeguard against cursor leak, which occurs if you don't call ResultSet.close() and Statement.close()

addAlias

     public synchronized void addAlias(ConnectionPool pool)

  Adds an alias to the pool using a supplied ConnectionPool object.

  Beware! - this will not call Class.forName() on the JDBC driver for you. Make sure to call that before calling this method or the driver will not work (getConnection() will fail)

removeAlias

     public synchronized void removeAlias(String alias) throws SQLException

  Closes all Connections in the pool with the supplied alias

getPools

     public Enumeration getPools()

  Returns an Enumeration of the ConnectionPool objects currently created

getPool

     public ConnectionPool getPool(String alias) throws SQLException

  Returns the pool with the supplied alias

run

     public void run()

  Monitors each ConnectionPool and makes sure that no connection has gone idle or has been checked out for too long.

setTracing

     public void setTracing(boolean on)

  Turns tracing on or off. It is off by default. When you turn tracing on, the pool will print verbose messages about what it's doing to STDERR. If your application is hanging when it calls DriverManager.getConnection() this may help diagnose where things go wrong.

connect

     public Connection connect(String url,
                               Properties props) throws SQLException

  Returns a connection from pool

  Returns:
    s JDBC Connection from pool, or null if url does not start with URL_PREFIX

acceptsURL

     public boolean acceptsURL(String url)

  Returns true of url starts with URL_PREFIX

getMajorVersion

     public int getMajorVersion()

getMinorVersion

     public int getMinorVersion()

getPropertyInfo

     public DriverPropertyInfo[] getPropertyInfo(String str,
                                                 Properties props)

jdbcCompliant

     public boolean jdbcCompliant()

  Always returns false since I haven't sent this code to Sun for approval

    All Packages  Class Hierarchy  This Package  Previous  Next  Index