<html>
<head>
<title>Proposal for Database Connection Pool [DBCP] Package</title>
</head>
<body bgcolor="white">

<div align="center">
<h1>Proposal for <em>Database Connection Pool [DBCP]</em> Package</h1>
</div>

<h3>(0) Rationale</h3>
<p>
   Many Jakarta products support interaction with a relational database.
   Creating a new connection for each user can be time consuming
   (often requiring multiple seconds of clock time), in order to
   perform a database transaction that might take milliseconds.
   Opening a connection per user can be unfeasible in a publicly-hosted
   Internet application where the number of simultaneous users can
   be very large. Accordingly, developers often wish to share a "pool"
   of open connections between all of the application's current users.
   The number of users actually performing a request at any given time
   is usually a very small percentage of the total number of active
   users, and during request processing is the only time that a
   database connection is required. The application itself logs into
   the DBMS, and a handles any user account issues internally.
</p>
<p>
   There are several Database Connection Pools already available, both
   within Jakarta products and elsewhere. A Commons package would give
   committers an opportunity to coordinate their efforts to create and
   maintain a efficient, feature-rich package under the ASF license.
</p>

<h3>(1) Scope of the Package</h3>
<p>
   The package shall create and maintain a database connection pool
   package written in the Java language to be distributed under the ASF
   license. The package shall be available as a pseudo-JDBC driver and
   via a DataSource interface. The package shall also support multiple
   logins to multiple database systems, reclamation of stale or dead
   connections, testing for valid connections, PreparedStatement
   pooling, and other features.
</p>

<h3>(1.5) Interaction With Other Packages</h3>

<p><em>DBCP</em> relies on:
<ul>
<li><a href="http://java.sun.com/j2se">Java Development Kit</a>
    (Version 1.2 or later)</li>
<li><a href="http://java.sun.com/j2ee">Java 2 Enterprise Edition</a>
    (javax.sql packages only)</li>
<li>Jakarta-Commons Collections package</li>
<li>Jakarta-Commons Pool package</li>
<li>[currently, for JOCL configuration] <a href="http://www.megginson.com/SAX">Simple API for XML</a>
    (Version 2.0 or later)</li>
<li>[currently, for JOCL configuration] A SAX 2.0 compliant XML parser (Xerces, XP, etc.)</li>
<li><a href="http://www.junit.org">JUnit Testing Framework</a>
    (Version 3.2 or later) - for unit tests only, not required
    for deployment</li>
</ul>

<p>
   External configuration of the database connection pool will be supporting
   using the Digester XML configuration package. (Soon to be a proposal to
   Jakarta-Commons). Currently, configuration may be accomplished using the
   Java Object Configuration Language (part of the proposed code base).
</p>

<h3>(2) Initial Source of the Package</h3>

<p>
   The initial codebase was contributed by Rodney Waldhoff from a
   working project and can be distributed under the Apache license.
</p>

<p>The proposed package name for the new component is
<code>org.apache.commons.dbcp</code>.</p>


<h3>(3)  Required Jakarta-Commons Resources</h3>

<ul>
<li>CVS Repository - New directory <code>dbcp</code> in the
    <code>jakarta-commons</code> CVS repository.  All initial committers
    are already committers on <code>jakarta-commons</code>, so no
    additional user setups are required.</li>
<li>Mailing List - Discussions will take place on the general
    <em>jakarta-commons@jakarta.apache.org</em> mailing list.  To help
    list subscribers identify messages of interest, it is suggested that
    the message subject of messages about this component be prefixed with
    [DBCP].</li>
<li>Bugzilla - New component "DBCP" under the "Commons" product
    category, with appropriate version identifiers as needed.</li>
<li>Jyve FAQ - New category "commons-dbcp" (when available).
</ul>


<h3>(4) Initial Committers</h3>
<ul>
   <li>Morgan Delagrange</li>
   <li>Geir Magnusson Jr.</li>
   <li>Craig R. McClanahan</li>
   <li>Rodney Waldhoff</li>
   <li>David Weinrich</li>
</ul>
</body>
</html>
