								  README

								SmartPool 		
							   Version 1.1


Contents

	* Introduction
	* Installation
	* Features
	* Features expected in future releases
	* System Requirements
	* User Documentation
	* Source (not for people with object oriented MIND-SET and  
		   don't want to peek into a closed box component)
	* Java Doc			   
	


Introduction   

	 Thank you for downloading this release of 	SmartPool 1.1.
	 SmartPool is a ready to use Connection pooling component.
	 It provides much more features than a conventional connection pooling
	 component that is available on the net for free. It's basically modeled
	 on the pooling features of an Application Server provides.
	 The basic objective behind building this pooling component (I have just
	 started  it rather) is to provide an Application Server like features
	 to a web server or rather any other application which needs continuous 
	 access to the database and thus needs to maintains a pool of 
	 connections. This is just the beginning of a huge effort, 
	 and would appreciate suggestions, reporting/cribbing on 
	 bugs (No program is Bug Free until the last user is dead) and 
	 suggested modifications.

	 NOTE: 
	 This Component is for people who are familiar with the concept 
	 of connection pooling and have experienced nightmares trying to  
	 detect leaks, and connection mixing i.e. (state of the 
	 Connection being retained even after the connection is released and 
	 allocated to some other component).
	 Novices can use it, but may find it difficult to understand why some 
	 things are as the way they are.
	
	 Words from the wise:
	 The API is very easy to use, initially you might get little confused
	 but soon you will get used to the confusion.


Installation	

	 Unzip the downloaded file. I guess you have already done it, other wise 
	 you would not be reading this README.txt. 
	 You just need to put $EXTRACT_DIR/classes.jar file 
	 in your class path and you are ready to write code accessing 
	 the SmartPool API.
	 For more information on how to use it, refer to User Documentation. Before
	 using the component you need to build a XML (read Exaggerated Markup 
	 Language) file, believe me even a Pipe Delimited Configuration file 
	 would have served the purpose, but I chose to use XML because people 
	 around me said that such easy to generate/parse delimited format is no 
	 longer cool and XML is the hottest thing. To check on the syntax
	 of configuration file check the pool-config.dtd and the sample 
	 file pool-config.xml.
	 If you are not familiar with XML, don't be scared of the configuration,
	 even I am equally unfamiliar with it, edit the sample file and your job
	 is done.

Distinguishing Features 

	* 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-outs
		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.
		
	* 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.

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

	* Automatic closing of associated Statements, PreparedStatements, 
		CallableStatements when a connection is returned back to the 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
	
	* 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.


		
Features expected in future releases

	* Logging of time taken for database operations.
	* Hot Deployment i.e. allowing changes to be made to the pool 
		configuration without requiring to restart the JVM.
	* Support for Distributed Transactions
	* Forced recovery of least recently used connections.
	* Compliant with J2EE JDBC/pooling Specifications

System Requirements 
	
	* JDK 1.3 or higher. 
	* Sun's JAXP API for parsing the configuring the XML API and apache xerces parser.

	
User Documentation

	* $EXTRACT_DIR/doc/ 
	
Source 
	
	* $EXTRACT_DIR/source

Java Doc
	
	* $EXTRACT_DIR/doc/java_doc


