<html>
<head>
<title>Proposal for Pool Package</title>
</head>
<body bgcolor="white">

<div align="center">
<h1>Proposal for <em>Pool</em> Package</h1>
</div>

<h3>(0) Rationale</h3>
<p>
   Often a Java application makes use of instances or resources that
   are expensive to create or that need to be limited due to
   external constraints.  Database and other network connections are
   leading, although certainly not the only examples of this
   situation. A pool of instances can be helpful in these circumstances.
</p>
<p>
   A Commons package for object pooling would give committers an
   opportunity to coordinate their efforts and create and maintain an
   efficient, feature-rich package under the ASF licence.
</p>

<h3>(1) Scope of the Package</h3>
<p>
   The package will create and maintain an object (instance) pooling
   package to be distributed under the ASF license.
</p>
<p>
   The package should support a variety of pool implementations, but
   encourage support of an interface that makes these implementations
   interchangeable.
</p>

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

<p><em>Pool</em> relies upon on standard JDK 1.2 (or later) and
the Commons-Collections APIs for production deployment.  It utilizes the
JUnit unit testing framework for developing and executing unit tests, but
this is of interest only to developers of the component.  Pool
will also be a dependency for several future proposed components
for the Jakarta Commons subproject.

<p>No external configuration files are utilized.</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.pool</code>.</p>


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

<ul>
<li>CVS Repository - New directory <code>pool</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
    [Pool].</li>
<li>Bugzilla - New component "Pool" under the "Commons" product
    category, with appropriate version identifiers as needed.</li>
<li>Jyve FAQ - New category "commons-pool" (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>
