Design
PooliT has a very simple core API consisting of four interfaces:
Pooler
and PoolHandler
for pooling purposes, and
Cacher
and CacheHandler
for caching purposes.
The core API is found in the ca.huy.poolit
package.
The Pooler
interface defines methods to retrieve and return
objects to a pool. It is left to classes implementing this interface to
establish the pooling algorithm to be used. Several Pooler
s are
provided with PooliT that offer simple pooling strategies -- like
FixedPooler
that store objects in an array -- to more complex
strategies, such as TimeoutPooler
that will clean up objects which
have not been used for an extended period of time. Pooler
s
provided with PooliT can be found in the
ca.huy.poolit.poolers
package. Please consult the javadoc to
find other Pooler
s provided with PooliT. Pooler
s
should not be tied to a particular class to be pooled. Pooler
s
are meant to be able to pool any type of object, and should only be concerned
about the pooling algorithm.
The PoolHandler
interface defines methods to create, destroy and
check the integrity of objects that are being pooled. Pooler
s
call the PoolHandler
to perform the three actions mentioned when needed
because the handlers contain the logic to perform these operations for a particular
class. Several PoolHandler
s are packaged with PooliT and can be
found in the ca.huy.poolit.handlers
package. Some
examples of classes that have handlers provided by PooliT:
java.net.Socket
java.sql.Connection
javax.naming.InitialContext
The Cacher
interface defines methods to retrieve and store objects
in a cache. Objects stored are keyed so that they may be retrieved later with the
same key (like a Map). Classes implementing this interface only concern themselves with
how objects are cached and not the types of objects being cached. If an object
is not found in a cache, the Cacher
will call the CacheHandler
to create the requested object. Think of a Cacher as a repository where the same
instance given its keys can be retrieved by multiple objects. Contrast that to a
Pooler where each request to a Pooler results in a different instance being returned
each time.
The CacheHandler
interface defines methods to create and destroy objects
that are being cached. CacheHandler
defines methods that are similar to
methods found in PoolHandler
. Most classes found in the
ca.huy.poolit.handlers
implement both these interfaces because behaviourily
they are very similar.