Initially you may get confused, very soon you will get used to the confusion Logo

  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 here.

SmartPool Releases:   

Features expected in later release
Reporting bugs on SmartPool
About the Author

Feel free to email me at I have my filters in place :)

SmartPool 1.5

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 stickiness.

New Features:

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

SmartPool 1.2.1
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

SmartPool 1.2

New Features:

SmartPool 1.1


  • 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
SmartPool 1.0 was a DOA (dead on arrival). Thus no point in documenting SmartPool 1.0.

Features expected in later releases:

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 instance failure
  • JDBC Support for TAF

Low priority Backlog:

  • Profiling: Logging of time taken for database operations.
  • Hot Deployment: allowing changes to be made to the pool configuration without restarting the JVM.
  • Support for Distributed Transactions
  • Compliant with J2EE JDBC/pooling Specifications

Reporting bugs on SmartPool:

You can report bugs/suggestions/enhancements in SmartPool at I assure a prompt reply.
For bugs please make sure you include the following things in the bug description.

  • Detailed steps/test cases to reproduce the bug.
  • 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.