Author: tv
Date: Sun May 11 16:20:49 2014
New Revision: 1593811

URL: http://svn.apache.org/r1593811
Log:
Fix JCS-115: JDBCDiskCachePoolAccessManager is thread hostile

Modified:
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManager.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManagerUnitTest.java
    commons/proper/jcs/trunk/src/changes/changes.xml

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java?rev=1593811&r1=1593810&r2=1593811&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
 Sun May 11 16:20:49 2014
@@ -152,9 +152,10 @@ public class JDBCDiskCache<K extends Ser
         JDBCDiskCachePoolAccess poolAccess1 = null;
         if ( cattr.getConnectionPoolName() != null )
         {
-            JDBCDiskCachePoolAccessManager manager = 
JDBCDiskCachePoolAccessManager.getInstance( compositeCacheManager
-                .getConfigurationProperties() );
-            poolAccess1 = manager.getJDBCDiskCachePoolAccess( 
cattr.getConnectionPoolName() );
+            JDBCDiskCachePoolAccessManager manager = 
JDBCDiskCachePoolAccessManager.getInstance();
+            poolAccess1 = manager.getJDBCDiskCachePoolAccess(
+                    cattr.getConnectionPoolName(),
+                    compositeCacheManager.getConfigurationProperties() );
         }
         else
         {

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManager.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManager.java?rev=1593811&r1=1593810&r2=1593811&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManager.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManager.java
 Sun May 11 16:20:49 2014
@@ -57,32 +57,23 @@ public class JDBCDiskCachePoolAccessMana
     private static final Log log = LogFactory.getLog( 
JDBCDiskCachePoolAccessManager.class );
 
     /**
-     * You can specify the properties to be used to configure the thread pool. 
Setting this post
-     * initialization will have no effect.
-     */
-    private Properties props = null;
-
-    /**
      * Singleton, private
-     * <p>
-     * @param props
      */
-    private JDBCDiskCachePoolAccessManager( Properties props )
+    private JDBCDiskCachePoolAccessManager()
     {
-        this.setProps( props );
+        // empty
     }
 
     /**
      * returns a singleton instance
      * <p>
-     * @param props
      * @return JDBCDiskCachePoolAccessManager
      */
-    public static synchronized JDBCDiskCachePoolAccessManager getInstance( 
Properties props )
+    public static synchronized JDBCDiskCachePoolAccessManager getInstance()
     {
         if ( instance == null )
         {
-            instance = new JDBCDiskCachePoolAccessManager( props );
+            instance = new JDBCDiskCachePoolAccessManager();
         }
         return instance;
     }
@@ -90,16 +81,17 @@ public class JDBCDiskCachePoolAccessMana
     /**
      * Returns a pool for the name if one has been created. Otherwise it 
creates a pool.
      * <p>
-     * @param poolName
+     * @param poolName the name of the pool
+     * @param props the configuration properties for the pool
      * @return JDBCDiskCachePoolAccess
      */
-    public synchronized JDBCDiskCachePoolAccess getJDBCDiskCachePoolAccess( 
String poolName )
+    public synchronized JDBCDiskCachePoolAccess getJDBCDiskCachePoolAccess( 
String poolName, Properties props )
     {
         JDBCDiskCachePoolAccess poolAccess = pools.get( poolName );
 
         if ( poolAccess == null )
         {
-            JDBCDiskCachePoolAccessAttributes poolAttributes = 
configurePoolAccessAttributes( poolName );
+            JDBCDiskCachePoolAccessAttributes poolAttributes = 
configurePoolAccessAttributes( poolName, props );
             try
             {
                 poolAccess = JDBCDiskCachePoolAccessFactory.createPoolAccess( 
poolAttributes );
@@ -124,15 +116,16 @@ public class JDBCDiskCachePoolAccessMana
     /**
      * Configures the attributes using the properties.
      * <p>
-     * @param poolName
+     * @param poolName the name of the pool
+     * @param props the configuration properties for the pool
      * @return JDBCDiskCachePoolAccessAttributes
      */
-    protected JDBCDiskCachePoolAccessAttributes configurePoolAccessAttributes( 
String poolName )
+    protected JDBCDiskCachePoolAccessAttributes configurePoolAccessAttributes( 
String poolName, Properties props )
     {
         JDBCDiskCachePoolAccessAttributes poolAttributes = new 
JDBCDiskCachePoolAccessAttributes();
 
         String poolAccessAttributePrefix = POOL_CONFIGURATION_PREFIX + 
poolName + ATTRIBUTE_PREFIX;
-        PropertySetter.setProperties( poolAttributes, getProps(), 
poolAccessAttributePrefix + "." );
+        PropertySetter.setProperties( poolAttributes, props, 
poolAccessAttributePrefix + "." );
 
         poolAttributes.setPoolName( poolName );
 
@@ -142,20 +135,4 @@ public class JDBCDiskCachePoolAccessMana
         }
         return poolAttributes;
     }
-
-    /**
-     * @param props the props to set
-     */
-    protected void setProps( Properties props )
-    {
-        this.props = props;
-    }
-
-    /**
-     * @return the props
-     */
-    protected Properties getProps()
-    {
-        return props;
-    }
 }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManagerUnitTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManagerUnitTest.java?rev=1593811&r1=1593810&r2=1593811&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManagerUnitTest.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManagerUnitTest.java
 Sun May 11 16:20:49 2014
@@ -50,12 +50,10 @@ public class JDBCDiskCachePoolAccessMana
         props.put( prefix + ".maxActive", String.valueOf( maxActive ) );
         props.put( prefix + ".driverClassName", driverClassName );
 
-        JDBCDiskCachePoolAccessManager manager = 
JDBCDiskCachePoolAccessManager.getInstance( props );
-        // in case another test has initilized this. See: JCS-114, JCS-115
-        manager.setProps( props );
+        JDBCDiskCachePoolAccessManager manager = 
JDBCDiskCachePoolAccessManager.getInstance();
 
         // DO WORK
-        JDBCDiskCachePoolAccessAttributes result = 
manager.configurePoolAccessAttributes( poolName );
+        JDBCDiskCachePoolAccessAttributes result = 
manager.configurePoolAccessAttributes( poolName, props );
 
         // VERIFY
         assertEquals( "Wrong url value", url, result.getUrl() );
@@ -91,9 +89,7 @@ public class JDBCDiskCachePoolAccessMana
         props.put( prefix + ".maxActive", String.valueOf( maxActive ) );
         props.put( prefix + ".driverClassName", driverClassName );
 
-        JDBCDiskCachePoolAccessManager manager = 
JDBCDiskCachePoolAccessManager.getInstance( props );
-        // in case another test has initilized this. See: JCS-114, JCS-115
-        manager.setProps( props );
+        JDBCDiskCachePoolAccessManager manager = 
JDBCDiskCachePoolAccessManager.getInstance();
 
         System.setProperty( "hsqldb.cache_scale", "8" );
 
@@ -106,7 +102,7 @@ public class JDBCDiskCachePoolAccessMana
         HsqlSetupTableUtil.setupTABLE( cConn, "JCSTESTTABLE_ACCESS" );
 
         // DO WORK
-        JDBCDiskCachePoolAccess result = manager.getJDBCDiskCachePoolAccess( 
poolName );
+        JDBCDiskCachePoolAccess result = manager.getJDBCDiskCachePoolAccess( 
poolName, props );
 
         // VERIFY
         assertNotNull( "Should have an access class", result );

Modified: commons/proper/jcs/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/changes/changes.xml?rev=1593811&r1=1593810&r2=1593811&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/changes/changes.xml (original)
+++ commons/proper/jcs/trunk/src/changes/changes.xml Sun May 11 16:20:49 2014
@@ -20,6 +20,9 @@
        </properties>
        <body>
                <release version="2.0" date="unreleased" description="JDK 1.6 
based major release">
+            <action issue="JCS-115" dev="tv" type="fix" due-to="Sebastian 
Bazley">
+                JDBCDiskCachePoolAccessManager is thread hostile
+            </action>
             <action issue="JCS-118" dev="olamy" type="add" due-to="Romain 
Manni-Bucau">
                 Add jcache implementation
             </action>


Reply via email to