I've started to sketch out an enhancement to the GenericDataSource
that will reclaim connections that an app forgot to close.
My current design is to add an inner class (below) to the
GenericDataSource class. Essentially the GenericDataSource
will have a daemon thread that periodically checks for idle
connections.
Naturally, since this is my first attempt at Struts development I
have some questions and thoughts:
- it occurs to me that simply returning idle connections to the
pool may not be safe. What if the original thread that requested
the connection starts to use it again while some other thread
is currently using the connection. Maybe the idle connection
should be destroyed and a new one created ?
- i'm not sure how to go about logging errors from the
GenericDataSource class, please advise.
- configurable options: connectionTimeout
Thanks for any comments.
--
Nick
private class ConnectionCollector implements Runnable {
public void run () {
// look for Connections that are not being used
Date currentTime = new Date();
for (int i = 0; i < usedConnections.size(); i++) {
GenericConnection conn = (GenericConnection)
usedConnections.elementAt(i);
if ((timeDifference(currentTime, conn.getLastAccessTime()
>= connectionTimeout) {
try {
conn.close();
} catch (SQLException e) {
log("Exception closing Connection");}
}
}
}
}