SharedPoolDataSource saves wrong password forever
-------------------------------------------------
Key: DBCP-245
URL: https://issues.apache.org/jira/browse/DBCP-245
Project: Commons Dbcp
Issue Type: Bug
Affects Versions: 1.2.2
Environment: Use of SharedPoolDataSource see sample code
if (privSharedDS == null)
{
privConPoolDS = new PGConnectionPoolDataSource();
privConPoolDS.setServerName(privServerName);
privConPoolDS.setDatabaseName(privServerDB);
privConPoolDS.setUser(privUser);
privConPoolDS.setPassword(privPassword);
// --------------------------------------
// dbcp caching via SharedPoolDataSource
// --------------------------------------
privSharedDS = new SharedPoolDataSource();
privSharedDS.setConnectionPoolDataSource(privConPoolDS);
privSharedDS.setMaxActive(10); // 0 = no limit
privSharedDS.setMaxIdle(10);
privSharedDS.setMinEvictableIdleTimeMillis(1000);
privSharedDS.setMaxWait(1000); // -1 = no limit
privSharedDS.setTimeBetweenEvictionRunsMillis(1000);
privSharedDS.setTestWhileIdle(true);
}
// --------------------------------------
// dbcp caching via SharedPoolDataSource
// --------------------------------------
tmpCon = privSharedDS.getConnection(privUser, privPassword);
Reporter: Michael Drechsel
Priority: Minor
The SharedPoolDataSource saves wrong password forever
1. Get a connection for user1 (use username of user1 and password of user1)
---> connection ok
2. Get a connection for user2 (use username of user2 and a wrong password) -->
connection failed
3. Get a connection for user2 (use username of user2 and password of user2) -->
connection will be failed too because the wrong password is stored in the
usersKey map.
Bugfix
===================================================================
protected synchronized PooledConnectionAndInfo
getPooledConnectionAndInfo(String username, String password)
throws SQLException {
if (pool == null) {
try {
registerPool(username, password);
} catch (NamingException e) {
throw new SQLNestedException("RegisterPool failed", e);
}
}
PooledConnectionAndInfo info = null;
UserPassKey userPassKey = null;
try {
userPassKey = getUserPassKey(username, password);
info = (PooledConnectionAndInfo) pool
.borrowObject(userPassKey);
}
catch (Exception e) {
if (userKeys != null && userKeys.containsKey(username)) {
userKeys.remove(username);
}
throw new SQLNestedException(
"Could not retrieve connection info from pool", e);
}
return info;
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.