You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tv...@apache.org on 2014/05/11 18:20:51 UTC

svn commit: r1593811 - in /commons/proper/jcs/trunk: commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/ commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/jdbc/ src/changes/

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>