You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ps...@apache.org on 2009/12/24 21:12:14 UTC
svn commit: r893809 - in
/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources:
PerUserPoolDataSource.java SharedPoolDataSource.java
Author: psteitz
Date: Thu Dec 24 20:12:11 2009
New Revision: 893809
URL: http://svn.apache.org/viewvc?rev=893809&view=rev
Log:
Protect user keys. JIRA:DBCP-291.
Modified:
commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/PerUserPoolDataSource.java
commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/SharedPoolDataSource.java
Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/PerUserPoolDataSource.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/PerUserPoolDataSource.java?rev=893809&r1=893808&r2=893809&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/PerUserPoolDataSource.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/PerUserPoolDataSource.java Thu Dec 24 20:12:11 2009
@@ -443,18 +443,20 @@
PoolKey key = null;
String name = username + password;
String dsName = getDataSourceName();
- Map dsMap = (Map) poolKeys.get(dsName);
- if (dsMap != null) {
- key = (PoolKey) dsMap.get(name);
- }
-
- if (key == null) {
- key = new PoolKey(dsName, name);
- if (dsMap == null) {
- dsMap = new HashMap();
- poolKeys.put(dsName, dsMap);
+ synchronized (poolKeys) {
+ Map dsMap = (Map) poolKeys.get(dsName);
+ if (dsMap != null) {
+ key = (PoolKey) dsMap.get(name);
+ }
+
+ if (key == null) {
+ key = new PoolKey(dsName, name);
+ if (dsMap == null) {
+ dsMap = new HashMap();
+ poolKeys.put(dsName, dsMap);
+ }
+ dsMap.put(name, key);
}
- dsMap.put(name, key);
}
return key;
}
Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/SharedPoolDataSource.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/SharedPoolDataSource.java?rev=893809&r1=893808&r2=893809&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/SharedPoolDataSource.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/SharedPoolDataSource.java Thu Dec 24 20:12:11 2009
@@ -168,20 +168,29 @@
}
PooledConnectionAndInfo info = null;
+
+ UserPassKey key = null;
+ synchronized (userKeys) {
+ key = getUserPassKey(username, password);
+ }
+
try {
- info = (PooledConnectionAndInfo) pool
- .borrowObject(getUserPassKey(username, password));
+ info = (PooledConnectionAndInfo) pool.borrowObject(key);
}
catch (SQLException ex) { // Remove bad UserPassKey
- if ((userKeys != null) && (userKeys.containsKey(username))) {
- userKeys.remove(username);
+ if (userKeys != null) {
+ synchronized (userKeys) {
+ if (userKeys.containsKey(username)) {
+ userKeys.remove(username);
+ }
+ }
}
throw new SQLNestedException(
- "Could not retrieve connection info from pool", ex);
+ "Could not retrieve connection info from pool", ex);
}
catch (Exception e) {
throw new SQLNestedException(
- "Could not retrieve connection info from pool", e);
+ "Could not retrieve connection info from pool", e);
}
return info;
}