You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by di...@apache.org on 2003/08/11 16:08:39 UTC
cvs commit: jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/jdbc2pool Jdbc2PoolDataSource.java
dirkv 2003/08/11 07:08:39
Modified: dbcp/src/java/org/apache/commons/dbcp/jdbc2pool
Jdbc2PoolDataSource.java
Log:
Bugzilla Bug 18905
Couldn't get connection (Jdbc2PoolDataSource)
Jdbc2PoolDataSource.registerPool didn't check if the supplied username/password was correct.
A broken pool was registered and the next call to getConnection always used this pool.
Now registerPool tries to connect and returns the SQLException if it fails.
(this fix solved the 3 testcases that were failing for me)
Revision Changes Path
1.14 +27 -3 jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/jdbc2pool/Jdbc2PoolDataSource.java
Index: Jdbc2PoolDataSource.java
===================================================================
RCS file: /home/cvs/jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/jdbc2pool/Jdbc2PoolDataSource.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- Jdbc2PoolDataSource.java 26 Jul 2003 01:23:21 -0000 1.13
+++ Jdbc2PoolDataSource.java 11 Aug 2003 14:08:39 -0000 1.14
@@ -958,7 +958,7 @@
try {
registerPool(username, password);
pool = pools.get(key);
- } catch (Exception e) {
+ } catch (NamingException e) {
e.printStackTrace();
throw new SQLException(e.getMessage());
}
@@ -1097,7 +1097,7 @@
}
private synchronized void registerPool(String username, String password)
- throws javax.naming.NamingException {
+ throws javax.naming.NamingException, SQLException {
Map pools = (Map) dsInstanceMap.get(instanceKey);
PoolKey key = getPoolKey(username);
if (!pools.containsKey(key)) {
@@ -1115,6 +1115,30 @@
ctx = new InitialContext(jndiEnvironment);
}
cpds = (ConnectionPoolDataSource) ctx.lookup(dataSourceName);
+ }
+
+ // try to get a connection with the supplied username/password
+ PooledConnection conn = null;
+ try {
+ if (username != null) {
+ conn = cpds.getPooledConnection(username, password);
+ }
+ else {
+ conn = cpds.getPooledConnection();
+ }
+ if (conn == null) {
+ throw new SQLException("Cannot connect using the supplied username/password");
+ }
+ }
+ finally {
+ if (conn != null) {
+ try {
+ conn.close();
+ }
+ catch (SQLException e) {
+ // at least we could connect
+ }
+ }
}
Object whicheverPool = null;
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org