SmartPool is a
connection-pooling component modeled on pooling features provided by
Application Server. SmartPool makes an attempt to solve critical issues like
connection leaks, connection blocking, open JDBC objects like Statements,
PreparedStatements etc. Features of SmartPool include support for multiple
pools, automatic closing of associated JDBC objects, detect connection leaks
based on configurable time-outs, track connection usage, forced recovery of
least recently used connections, wrap SmartPool to an existing pool, monitor
runtime status of the pools apart from conventional pooling support.
SmartPool 1.5 focuses on clustered databases
like Oracle RAC and is centered around supporting load balancing across
database instances and address one of the issues discussed
Features expected in later
Reporting bugs on SmartPool
Feel free to email me at
email@example.com. I have
my filters in place :)
This releases of SmartPool focuses completely on clustered database
primarily Oracle Real Applications Clusters (RAC). SmartPool 1.5 tries to
incorporate load balancing across instances in a RAC database with session
Migrating to SmartPool 1.5:
Following things have changed in 1.5 which are not backward compatible.
- The configuration file has been changed
for good with xsd based validation rather then dtd bases validation.
- SmartPool now uses log4j for logging.
Logging can be enabled/disabled/configured externally using log4j.
However log4j libraries are required in the classpath
This release just contains the classes.jar file to be included in the
classpath. This release has some trivial bug fixes and also makes sure that
all the monitoring thread are marked as daemon threads so that they don't
block the JVM from exiting. For documentation please refer to SmartPool 1.2
- Manages multiple pools: Multiple pools
with totally different configurations can be maintained and yet providing
a Singleton single point access to the pools.
- Detect leaks based on configurable time
out: Supports detecting of connection leaks based on time-outs through
Connection Leak Listener Interface. Along with detecting leaks other
information such as the time at which the connection was obtained, owner
of the connection, last accesses time, etc is provided.
- Automatic resizing of connection pools:
Connection pool grows when the load is high, and shrinks when there are
too many free connections by closing down excessive free connections thus
avoiding blocking of other accesses to the database.
Complete monitoring of the Connection pool: Well defined interfaces are
provided to get the run time status of the connection pool such as
current pool size, no of used connections, status of the used connections,
owners of the connection.
- Connection Validation: Automatic
connection recovery in case of connection failures. Every connection is
validated against a query specified in the configuration file before it is
leased out to the consumer. Failed connection is replaced with a new
connection. Three consecutive invalid connections results in a exception
thrown to the consumer.
- Closing of JDBC Objects: Automatic
closing of associated Statements, PreparedStatements,
CallableStatements when a connection is returned back to the pool.
- Wrap SmartPool to an existing pool: Wrap
SmartPool to an existing pool such as a DataSource of an Application
server. The role of SmartPool in this case is just to provide features
like leak detection, automatic closing of Statement Objects etc. SmartPool
does not maintain any pool of connections, it expects the parent pool to
do the pooling.
- Resetting Connection State: Automatic
rollback, if the connection is used in a transaction and returned to pool
with auto-commit set to false.
- Scalable/Flexible/Configurable (J2EE
buzz words again): I don't know whether it is Scalable & Flexible (I
thinks it is), but it is certainly configurable with almost all the above
mentioned features can be configured and even turned off if not needed.
SmartPool 1.0 was a DOA (dead on arrival). Thus no point in documenting
Features expected in later
Just a connection pool is no longer cool. I am shifting focus from just a
connection pool to a Oracle RAC centered component. Some of the features
that I am keen on building are:
- Allow load based subpooling
- Use Oracle 10g Fan events to trap
- JDBC Support for TAF
Low priority Backlog:
- Profiling: Logging of time taken for
- Hot Deployment: allowing changes to be
made to the pool configuration without restarting the JVM.
- Support for Distributed Transactions
- Compliant with J2EE JDBC/pooling
Reporting bugs on SmartPool:
You can report
bugs/suggestions/enhancements in SmartPool at
assure a prompt reply.
For bugs please make sure you include the following things in the bug
- Detailed steps/test cases to reproduce
- Your environment (OS, Database,
Application/Web Server etc).
- Version of SmartPool you are using.
- Stack trace (if available)
- SmartPool log file, only available
SmartPool 1.2 onwards.
If I can reproduce the bug, I will fix it
at the earliest.