Hi,
I have a proposed correction for the class PoolableConnectionFactory.java
The method validateObject(Object object) has a block of code that
responsible for doing the test-query that currently looks like this:
if(null != query) {
Statement stmt = null;
ResultSet rset = null;
try {
long startTime = System.currentTimeMillis();
stmt = conn.createStatement();
rset = stmt.executeQuery(query);
if(rset.next()) {
System.err.println("val took: " +
(System.currentTimeMillis() - startTime));
return true;
} else {
return false;
}
} catch(Exception e) {
try {
rset.close();
} catch(Throwable t) {
;
}
try {
stmt.close();
} catch(Throwable t) {
;
}
return false;
}
} else {
I propose fixing the try-catch block that does the test query so that it
looks like this:
if(null != query) {
Statement stmt = null;
ResultSet rset = null;
try {
long startTime = System.currentTimeMillis();
stmt = conn.createStatement();
rset = stmt.executeQuery(query);
if(rset.next()) {
System.err.println("val took: " +
(System.currentTimeMillis() - startTime));
return true;
} else {
return false;
}
} catch(Exception e) {
return false;
} finally {
try {
rset.close();
} catch(Throwable t) {
;
}
try {
stmt.close();
} catch(Throwable t) {
;
}
}
} else {
In case you missed it, I am proposing moving the closing of the result set
and statement to a "finally" block.
This is important to me because RDBMs only allow a limited number of
statements/result sets per connection, the current code relies on garbage
collection to close them, but this might not happen until after the
connection has already been re-borrowed several more times. Oracle 8.1x
especially has a problem with connections becoming corrupt if statements
are closed meticulously.
Comments/Thoughts?
James
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>