Author: psteitz Date: Sat Mar 8 22:31:16 2008 New Revision: 635174 URL: http://svn.apache.org/viewvc?rev=635174&view=rev Log: Fixed inconsistent synchronization on _rollbackAfterValidation, _validationQuery and _pool by making the first two volatile and making both getter and setter for _pool synchronized. JIRA: DBCP-252
Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/CPDSConnectionFactory.java commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/KeyedCPDSConnectionFactory.java commons/proper/dbcp/trunk/xdocs/changes.xml Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/CPDSConnectionFactory.java URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/CPDSConnectionFactory.java?rev=635174&r1=635173&r2=635174&view=diff ============================================================================== --- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/CPDSConnectionFactory.java (original) +++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/CPDSConnectionFactory.java Sat Mar 8 22:31:16 2008 @@ -49,8 +49,8 @@ + "I have no record of the underlying PooledConnection."; protected ConnectionPoolDataSource _cpds = null; - protected String _validationQuery = null; - protected boolean _rollbackAfterValidation = false; + protected volatile String _validationQuery = null; + protected volatile boolean _rollbackAfterValidation = false; protected ObjectPool _pool = null; protected String _username = null; protected String _password = null; @@ -121,33 +121,33 @@ /** * Sets the query I use to {*link #validateObject validate} - * {*link Connection}s. + * [EMAIL PROTECTED] Connection}s. * Should return at least one row. - * May be <tt>null</tt> - * @param validationQuery a query to use to {*link #validateObject validate} - * {*link Connection}s. + * May be <code>null</code> + * @param validationQuery a query to use to [EMAIL PROTECTED] #validateObject validate} + * [EMAIL PROTECTED] Connection}s. */ - public synchronized void setValidationQuery(String validationQuery) { + public void setValidationQuery(String validationQuery) { _validationQuery = validationQuery; } /** * Sets whether a rollback should be issued after - * {*link #validateObject validating} - * {*link Connection}s. + * [EMAIL PROTECTED] #validateObject validating} + * [EMAIL PROTECTED] Connection}s. * @param rollbackAfterValidation whether a rollback should be issued after - * {*link #validateObject validating} - * {*link Connection}s. + * [EMAIL PROTECTED] #validateObject validating} + * [EMAIL PROTECTED] Connection}s. */ - public synchronized void setRollbackAfterValidation( + public void setRollbackAfterValidation( boolean rollbackAfterValidation) { _rollbackAfterValidation = rollbackAfterValidation; } /** - * Sets the {*link ObjectPool} in which to pool {*link Connection}s. + * Sets the [EMAIL PROTECTED] ObjectPool} in which to pool {*link Connection}s. * @param pool the {*link ObjectPool} in which to pool those - * {*link Connection}s + * [EMAIL PROTECTED] Connection}s */ public synchronized void setPool(ObjectPool pool) throws SQLException { if (null != _pool && pool != _pool) { @@ -162,7 +162,11 @@ _pool = pool; } - public ObjectPool getPool() { + /** + * Gets the [EMAIL PROTECTED] ObjectPool} for [EMAIL PROTECTED] Connection}s. + * @return connection pool + */ + public synchronized ObjectPool getPool() { return _pool; } Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/KeyedCPDSConnectionFactory.java URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/KeyedCPDSConnectionFactory.java?rev=635174&r1=635173&r2=635174&view=diff ============================================================================== --- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/KeyedCPDSConnectionFactory.java (original) +++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/KeyedCPDSConnectionFactory.java Sat Mar 8 22:31:16 2008 @@ -50,8 +50,8 @@ + "I have no record of the underlying PooledConnection."; protected ConnectionPoolDataSource _cpds = null; - protected String _validationQuery = null; - protected boolean _rollbackAfterValidation = false; + protected volatile String _validationQuery = null; + protected volatile boolean _rollbackAfterValidation = false; protected KeyedObjectPool _pool = null; /** @@ -118,22 +118,22 @@ /** * Sets the query I use to {*link #validateObject validate} {*link Connection}s. * Should return at least one row. - * May be <tt>null</tt> + * May be <code>null</code> * @param validationQuery a query to use to {*link #validateObject validate} {*link Connection}s. */ - synchronized public void setValidationQuery(String validationQuery) { + public void setValidationQuery(String validationQuery) { _validationQuery = validationQuery; } /** * Sets whether a rollback should be issued after - * {*link #validateObject validating} - * {*link Connection}s. + * [EMAIL PROTECTED] #validateObject validating} + * [EMAIL PROTECTED] Connection}s. * @param rollbackAfterValidation whether a rollback should be issued after - * {*link #validateObject validating} - * {*link Connection}s. + * [EMAIL PROTECTED] #validateObject validating} + * [EMAIL PROTECTED] Connection}s. */ - public synchronized void setRollbackAfterValidation( + public void setRollbackAfterValidation( boolean rollbackAfterValidation) { _rollbackAfterValidation = rollbackAfterValidation; } @@ -156,7 +156,7 @@ _pool = pool; } - public KeyedObjectPool getPool() { + public synchronized KeyedObjectPool getPool() { return _pool; } Modified: commons/proper/dbcp/trunk/xdocs/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/xdocs/changes.xml?rev=635174&r1=635173&r2=635174&view=diff ============================================================================== --- commons/proper/dbcp/trunk/xdocs/changes.xml (original) +++ commons/proper/dbcp/trunk/xdocs/changes.xml Sat Mar 8 22:31:16 2008 @@ -114,6 +114,12 @@ Made getPool synchronized in PoolableConnectionFactory. Fixes inconsistent synchronization accessing _pool. </action> + <action dev="psteitz" type="fix" issue="DBCP-252" due-to="FindBugs"> + Fixed inconsistent synchronization on _rollbackAfterValidation, + _validationQuery and _pool in CPDSConnectionFactory and + KeyedCPDSConnectionFactory by making the first two volatile and making + both getter and setter for _pool synchronized. + </action> </release> <release version="1.2.2" date="2007-04-04" description="This is a maintenance release containing bug fixes