18-Oct-05 (Created: 18-Oct-05) | More in 'Howto-Advanced'

How to use ConnectionEventDistributor for manipulating Aspire data base connections

Intent

While programming databases it is important sometimes to prime the connection object. This is done by setting some additional attributes or parameters on a connection object using the "select" statements. As Aspire uses connection pools, the programmers rarely have control of the connection object directly (although it is possible). This facility is an attempt at providing a way to set these parameters using an event model.

The set of connection events generated by Aspire


public interface IConnectionEvents 
{
    public static String NAME = "aspire.db.connectionevents";
    public boolean onCreateConnection(Connection con) throws DBException;
    public boolean onPreCloseConnection(Connection con) throws DBException;
	
	//after getting the connection from the pool
    public boolean onGetConnection(Connection con) throws DBException;
	
	//before placing the connection in the pool
    public boolean onPutConnection(Connection con) throws DBException;
}

Property file entries on how to use this


request.aspire.db.connectionevents.classname=\
com.ai.db.events.ConnectionEventDistributor

request.aspire.db.connectionevents.eventHandlerList=\
handler1,handler2
 
#Log the connection events
request.handler1.classname=\
com.ai.db.events.ConnectionEventLogger
 
#Call a select statement to set certain connection properties
request.handler2.classname=\
com.ai.db.events.RequestBasedConnectionEventDemultiplexer

request.handler2.onCreateConnectionRequestName=stmt1
request.handler2.onPreCloseConnectionRequestName=stmt2
request.handler2.onGetConnectionRequestName=stmt3
request.handler2.onPutConnectionRequestName=stmt3
 
request.stmt1.classname=com.ai.db.DBRequestExecutor2
request.stmt1.stmt=some select statement
#Don't specify the usual .db here

Build information

Make sure you have build 22.1 to exercise this functionality.

What package is this implemented

com.ai.db.events.*;

General comments

In the example above the handler1 will log all the calls to all the connection based events. The handler2 actually allows you to specify select statements at each event level.