svn commit: r703574 - in /jakarta/jcs/trunk/src: java/org/apache/jcs/auxiliary/disk/jdbc/ java/org/apache/jcs/auxiliary/disk/jdbc/hsql/ java/org/apache/jcs/auxiliary/disk/jdbc/mysql/ java/org/apache/jcs/engine/ java/org/apache/jcs/engine/behavior/ java...

[email protected] Fri, 10 Oct 2008 21:15:45 -0000
Newsgroups gmane.comp.jakarta.turbine.jcs.devel
Message-ID <[email protected]>
Author: asmuts
Date: Fri Oct 10 14:15:45 2008
New Revision: 703574

URL: http://svn.apache.org/viewvc?rev=703574&view=rev
Log:
added the ability to have the jdbc disk caches share a connection pool.  

Added:
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessAttributes.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManager.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/HsqlSetupTableUtil.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManagerUnitTest.java
Modified:
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheFactory.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheManager.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccess.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/hsql/HSQLDiskCacheFactory.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheFactory.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheManager.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/engine/PooledCacheEventQueue.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheManager.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/utils/threadpool/ThreadPoolManager.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheManagerUnitTest.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheUnitTest.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheManagerUnitTest.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheUnitTest.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/engine/control/MockCompositeCacheManager.java

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java Fri Oct 10 14:15:45 2008
@@ -38,6 +38,7 @@
 import org.apache.jcs.auxiliary.disk.AbstractDiskCache;
 import org.apache.jcs.engine.CacheConstants;
 import org.apache.jcs.engine.behavior.ICacheElement;
+import org.apache.jcs.engine.behavior.ICompositeCacheManager;
 import org.apache.jcs.engine.behavior.IElementSerializer;
 import org.apache.jcs.engine.logging.behavior.ICacheEvent;
 import org.apache.jcs.engine.logging.behavior.ICacheEventLogger;
@@ -112,12 +113,14 @@
      * <p>
      * @param cattr
      * @param tableState
+     * @param compositeCacheManager
      */
-    public JDBCDiskCache( JDBCDiskCacheAttributes cattr, TableState tableState )
+    public JDBCDiskCache( JDBCDiskCacheAttributes cattr, TableState tableState,
+                          ICompositeCacheManager compositeCacheManager )
     {
         super( cattr );
 
-        this.setTableState( tableState );
+        setTableState( tableState );
 
         setJdbcDiskCacheAttributes( cattr );
 
@@ -127,7 +130,7 @@
         }
 
         // This initializes the pool access.
-        initializePoolAccess( cattr );
+        initializePoolAccess( cattr, compositeCacheManager );
 
         // Initialization finished successfully, so set alive to true.
         alive = true;
@@ -135,35 +138,48 @@
 
     /**
      * Registers the driver and creates a poolAccess class.
+     * <p>
      * @param cattr
+     * @param compositeCacheManager
+     * @return JDBCDiskCachePoolAccess for testing
      */
-    protected void initializePoolAccess( JDBCDiskCacheAttributes cattr )
+    protected JDBCDiskCachePoolAccess initializePoolAccess( JDBCDiskCacheAttributes cattr, ICompositeCacheManager compositeCacheManager )
     {
-        try
+        if ( cattr.getConnectionPoolName() != null )
+        {
+            JDBCDiskCachePoolAccessManager manager = JDBCDiskCachePoolAccessManager.getInstance( compositeCacheManager
+                .getConfigurationProperties() );
+            poolAccess = manager.getJDBCDiskCachePoolAccess( cattr.getConnectionPoolName() );
+        }
+        else
         {
             try
             {
-                // org.gjt.mm.mysql.Driver
-                Class.forName( cattr.getDriverClassName() );
-            }
-            catch ( ClassNotFoundException e )
-            {
-                log.error( "Couldn't find class for driver [" + cattr.getDriverClassName() + "]", e );
-            }
+                try
+                {
+                    // org.gjt.mm.mysql.Driver
+                    Class.forName( cattr.getDriverClassName() );
+                }
+                catch ( ClassNotFoundException e )
+                {
+                    log.error( "Couldn't find class for driver [" + cattr.getDriverClassName() + "]", e );
+                }
 
-            poolAccess = new JDBCDiskCachePoolAccess( cattr.getName() );
+                poolAccess = new JDBCDiskCachePoolAccess( cattr.getName() );
 
-            poolAccess.setupDriver( cattr.getUrl() + cattr.getDatabase(), cattr.getUserName(), cattr.getPassword(),
-                                    cattr.getMaxActive() );
+                poolAccess.setupDriver( cattr.getUrl() + cattr.getDatabase(), cattr.getUserName(), cattr.getPassword(),
+                                        cattr.getMaxActive() );
 
-            poolAccess.logDriverStats();
-        }
-        catch ( Exception e )
-        {
-            logError( getAuxiliaryCacheAttributes().getName(), "initializePoolAccess", e.getMessage() + " URL: "
-                + getDiskLocation() );
-            log.error( "Problem getting connection.", e );
+                poolAccess.logDriverStats();
+            }
+            catch ( Exception e )
+            {
+                logError( getAuxiliaryCacheAttributes().getName(), "initializePoolAccess", e.getMessage() + " URL: "
+                    + getDiskLocation() );
+                log.error( "Problem getting connection.", e );
+            }
         }
+        return poolAccess;
     }
 
     /**
@@ -295,7 +311,7 @@
      * @param element
      * @return true if the insertion fails because the record exists.
      */
-    private boolean insertRow( ICacheElement ce, Connection con, byte[] element  )
+    private boolean insertRow( ICacheElement ce, Connection con, byte[] element )
     {
         boolean exists = false;
         try
@@ -476,7 +492,7 @@
     /**
      * Queries the database for the value. If it gets a result, the value is deserialized.
      * <p>
-     * @param key 
+     * @param key
      * @return ICacheElement
      * @see org.apache.jcs.auxiliary.disk.AbstractDiskCache#doGet(java.io.Serializable)
      */
@@ -495,7 +511,7 @@
         }
 
         ICacheElement obj = null;
-        
+
         byte[] data = null;
         try
         {
@@ -1056,22 +1072,22 @@
     }
 
     /**
-     * For debugging.
+     * This is used by the event logging.
      * <p>
-     * @return this.getStats();
+     * @return the location of the disk, either path or ip.
      */
-    public String toString()
+    protected String getDiskLocation()
     {
-        return this.getStats();
+        return this.jdbcDiskCacheAttributes.getUrl();
     }
-
+    
     /**
-     * This is used by the event logging.
+     * For debugging.
      * <p>
-     * @return the location of the disk, either path or ip.
+     * @return this.getStats();
      */
-    protected String getDiskLocation()
+    public String toString()
     {
-        return this.jdbcDiskCacheAttributes.getUrl();
+        return this.getStats();
     }
 }

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java Fri Oct 10 14:15:45 2008
@@ -72,6 +72,20 @@
     private boolean UseDiskShrinker = true;
 
     /**
+     * If a pool name is supplied, the manager will attempt to load it. It should be configured in a
+     * separate section as follows. Assuming the name is "MyPool":
+     * 
+     * <pre>
+     * jcs.connectionpool.MyPool.attributes.userName=MyUserName
+     * jcs.connectionpool.MyPool.attributes.password=MyPassword
+     * jcs.connectionpool.MyPool.attributes.url=MyUrl
+     * jcs.connectionpool.MyPool.attributes.maxActive=MyMaxActive
+     * jcs.connectionpool.MyPool.attributes.driverClassName=MyDriverClassName
+     * </pre>
+     */
+    private String connectionPoolName;
+
+    /**
      * @param userName The userName to set.
      */
     public void setUserName( String userName )
@@ -235,6 +249,22 @@
     }
 
     /**
+     * @param connectionPoolName the connectionPoolName to set
+     */
+    public void setConnectionPoolName( String connectionPoolName )
+    {
+        this.connectionPoolName = connectionPoolName;
+    }
+
+    /**
+     * @return the connectionPoolName
+     */
+    public String getConnectionPoolName()
+    {
+        return connectionPoolName;
+    }
+
+    /**
      * For debugging.
      * <p>
      * @return debug string with most of the properties.

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheFactory.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheFactory.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheFactory.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheFactory.java Fri Oct 10 14:15:45 2008
@@ -41,17 +41,18 @@
      * This factory method should create an instance of the mysqlcache.
      * <p>
      * @param rawAttr
-     * @param arg1
+     * @param compositeCacheManager
      * @param cacheEventLogger
      * @param elementSerializer
      * @return AuxiliaryCache
      */
-    public AuxiliaryCache createCache( AuxiliaryCacheAttributes rawAttr, ICompositeCacheManager arg1,
+    public AuxiliaryCache createCache( AuxiliaryCacheAttributes rawAttr, ICompositeCacheManager compositeCacheManager,
                                        ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
     {
-        JDBCDiskCacheManager mgr = JDBCDiskCacheManager.getInstance( (JDBCDiskCacheAttributes) rawAttr,
-                                                                     cacheEventLogger, elementSerializer );
-        return mgr.getCache( (JDBCDiskCacheAttributes) rawAttr );
+        JDBCDiskCacheManager diskCacheManager = JDBCDiskCacheManager.getInstance( (JDBCDiskCacheAttributes) rawAttr,
+                                                                                  compositeCacheManager,
+                                                                                  cacheEventLogger, elementSerializer );
+        return diskCacheManager.getCache( (JDBCDiskCacheAttributes) rawAttr );
     }
 
     /**

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheManager.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheManager.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheManager.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheManager.java Fri Oct 10 14:15:45 2008
@@ -22,6 +22,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.jcs.auxiliary.AuxiliaryCache;
+import org.apache.jcs.engine.behavior.ICompositeCacheManager;
 import org.apache.jcs.engine.behavior.IElementSerializer;
 import org.apache.jcs.engine.logging.behavior.ICacheEventLogger;
 
@@ -43,15 +44,19 @@
 
     /** User configurable settings. */
     private JDBCDiskCacheAttributes defaultJDBCDiskCacheAttributes;
+    
+    /** The cache manager instance */
+    private ICompositeCacheManager compositeCacheManager;
 
     /**
      * Constructor for the HSQLCacheManager object
      * <p>
      * @param cattr
+     * @param compositeCacheManager 
      * @param cacheEventLogger
      * @param elementSerializer
      */
-    private JDBCDiskCacheManager( JDBCDiskCacheAttributes cattr, ICacheEventLogger cacheEventLogger,
+    private JDBCDiskCacheManager( JDBCDiskCacheAttributes cattr, ICompositeCacheManager compositeCacheManager, ICacheEventLogger cacheEventLogger,
                                   IElementSerializer elementSerializer )
     {
         if ( log.isInfoEnabled() )
@@ -61,6 +66,7 @@
         defaultJDBCDiskCacheAttributes = cattr;
         setElementSerializer( elementSerializer );
         setCacheEventLogger( cacheEventLogger );
+        setCompositeCacheManager( compositeCacheManager );
     }
 
     /**
@@ -77,18 +83,19 @@
      * Gets the instance attribute of the HSQLCacheManager class
      * <p>
      * @param cattr
+     * @param compositeCacheManager 
      * @param cacheEventLogger
      * @param elementSerializer
      * @return The instance value
      */
-    public static JDBCDiskCacheManager getInstance( JDBCDiskCacheAttributes cattr, ICacheEventLogger cacheEventLogger,
+    public static JDBCDiskCacheManager getInstance( JDBCDiskCacheAttributes cattr, ICompositeCacheManager compositeCacheManager, ICacheEventLogger cacheEventLogger,
                                                     IElementSerializer elementSerializer )
     {
         synchronized ( JDBCDiskCacheManager.class )
         {
             if ( instance == null )
             {
-                instance = new JDBCDiskCacheManager( cattr, cacheEventLogger, elementSerializer );
+                instance = new JDBCDiskCacheManager( cattr, compositeCacheManager, cacheEventLogger, elementSerializer );
             }
         }
         clients++;
@@ -118,7 +125,23 @@
     protected AuxiliaryCache createJDBCDiskCache( JDBCDiskCacheAttributes cattr, TableState tableState )
     {
         AuxiliaryCache raf;
-        raf = new JDBCDiskCache( cattr, tableState );
+        raf = new JDBCDiskCache( cattr, tableState, getCompositeCacheManager() );
         return raf;
     }
+
+    /**
+     * @param compositeCacheManager the compositeCacheManager to set
+     */
+    protected void setCompositeCacheManager( ICompositeCacheManager compositeCacheManager )
+    {
+        this.compositeCacheManager = compositeCacheManager;
+    }
+
+    /**
+     * @return the compositeCacheManager
+     */
+    protected ICompositeCacheManager getCompositeCacheManager()
+    {
+        return compositeCacheManager;
+    }
 }

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccess.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccess.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccess.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccess.java Fri Oct 10 14:15:45 2008
@@ -51,11 +51,7 @@
 
     /** default jdbc driver. */
     private static final String DRIVER_NAME = "jdbc:apache:commons:dbcp:";
-
-    // WE SHOULD HAVE A DIFFERENT POOL FOR EACH DB NO REGION
-    // THE SAME TABLE CAN BE USED BY MULTIPLE REGIONS
-    // this.setPoolName( jdbcDiskCacheAttributes.getCacheName() );
-
+    
     /**
      * Configures the pool name to use for the pool access.
      * <p>

Added: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessAttributes.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessAttributes.java?rev=703574&view=auto
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessAttributes.java (added)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessAttributes.java Fri Oct 10 14:15:45 2008
@@ -0,0 +1,158 @@
+package org.apache.jcs.auxiliary.disk.jdbc;
+
+/** These are used to configure the JDBCDiskCachePoolAccess class. */
+public class JDBCDiskCachePoolAccessAttributes
+{
+    /** The name of the pool.  */
+    private String poolName;
+    
+    /** URI to the db. */
+    private String url;
+    
+    /** username for the db */
+    private String userName;
+    
+    /** password for the database */
+    private String password;
+    
+    /** This is the default limit on the maximum number of active connections. */
+    public static final int DEFAULT_MAX_ACTIVE = 10;
+
+    /** Max connections allowed */
+    private int maxActive = DEFAULT_MAX_ACTIVE;
+
+    /** The name of the database. */
+    private String database = "";
+
+    /** The driver */
+    private String driverClassName;
+    
+    /**
+     * @param poolName the poolName to set
+     */
+    public void setPoolName( String poolName )
+    {
+        this.poolName = poolName;
+    }
+
+    /**
+     * @return the poolName
+     */
+    public String getPoolName()
+    {
+        return poolName;
+    }
+
+    /**
+     * @param connectURI the connectURI to set
+     */
+    public void setUrl( String connectURI )
+    {
+        this.url = connectURI;
+    }
+
+    /**
+     * @return the connectURI
+     */
+    public String getUrl()
+    {
+        return url;
+    }
+
+    /**
+     * @param userName the userName to set
+     */
+    public void setUserName( String userName )
+    {
+        this.userName = userName;
+    }
+
+    /**
+     * @return the userName
+     */
+    public String getUserName()
+    {
+        return userName;
+    }
+
+    /**
+     * @param password the password to set
+     */
+    public void setPassword( String password )
+    {
+        this.password = password;
+    }
+
+    /**
+     * @return the password
+     */
+    public String getPassword()
+    {
+        return password;
+    }
+
+    /**
+     * @param maxActive the maxActive to set
+     */
+    public void setMaxActive( int maxActive )
+    {
+        this.maxActive = maxActive;
+    }
+
+    /**
+     * @return the maxActive
+     */
+    public int getMaxActive()
+    {
+        return maxActive;
+    }
+    
+    /**
+     * @param database the database to set
+     */
+    public void setDatabase( String database )
+    {
+        this.database = database;
+    }
+
+    /**
+     * @return the database
+     */
+    public String getDatabase()
+    {
+        return database;
+    }
+
+    /**
+     * @param driverClassName the driverClassName to set
+     */
+    public void setDriverClassName( String driverClassName )
+    {
+        this.driverClassName = driverClassName;
+    }
+
+    /**
+     * @return the driverClassName
+     */
+    public String getDriverClassName()
+    {
+        return driverClassName;
+    }
+
+    /**
+     * For debugging.
+     * <p>
+     * @return debug string with most of the properties.
+     */
+    public String toString()
+    {
+        StringBuffer buf = new StringBuffer();
+        buf.append( "\nJDBCDiskCachePoolAccessAttributes" );
+        buf.append( "\n UserName [" + getUserName() + "]" );
+        buf.append( "\n Url [" + getUrl() + "]" );
+        buf.append( "\n Database [" + getDatabase() + "]" );
+        buf.append( "\n DriverClassName [" + getDriverClassName() + "]" );
+        buf.append( "\n MaxActive [" + getMaxActive() + "]" );
+        return buf.toString();
+    }
+}

Added: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManager.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManager.java?rev=703574&view=auto
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManager.java (added)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManager.java Fri Oct 10 14:15:45 2008
@@ -0,0 +1,151 @@
+package org.apache.jcs.auxiliary.disk.jdbc;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jcs.utils.config.PropertySetter;
+
+/**
+ * Manages JDBCDiskCachePoolAccess instances. If a connectionPoolName value is supplied, the JDBC
+ * disk cache will try to use this manager to create a pool. Assuming the name is "MyPool":
+ * 
+ * <pre>
+ * jcs.connectionpool.MyPool.attributes.userName=MyUserName
+ * jcs.connectionpool.MyPool.attributes.password=MyPassword
+ * jcs.connectionpool.MyPool.attributes.url=MyUrl
+ * jcs.connectionpool.MyPool.attributes.maxActive=MyMaxActive
+ * jcs.connectionpool.MyPool.attributes.driverClassName=MyDriverClassName
+ * </pre>
+ */
+public class JDBCDiskCachePoolAccessManager
+{
+    /** Singleton instance */
+    private static JDBCDiskCachePoolAccessManager instance;
+
+    /** Pool name to JDBCDiskCachePoolAccess */
+    private Map pools = new HashMap();
+
+    /** props prefix */
+    public static final String POOL_CONFIGURATION_PREFIX = "jcs.connectionpool.";
+
+    /** .attributes */
+    public final static String ATTRIBUTE_PREFIX = ".attributes";
+
+    /** The logger. */
+    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 )
+    {
+        this.setProps( props );
+    }
+
+    /**
+     * returns a singleton instance
+     * <p>
+     * @param props
+     * @return JDBCDiskCachePoolAccessManager
+     */
+    public static synchronized JDBCDiskCachePoolAccessManager getInstance( Properties props )
+    {
+        if ( instance == null )
+        {
+            instance = new JDBCDiskCachePoolAccessManager( props );
+        }
+        return instance;
+    }
+
+    /**
+     * Returns a pool for the name if one has been created. Otherwise it creates a pool.
+     * <p>
+     * @param poolName
+     * @return JDBCDiskCachePoolAccess
+     */
+    public synchronized JDBCDiskCachePoolAccess getJDBCDiskCachePoolAccess( String poolName )
+    {
+        JDBCDiskCachePoolAccess poolAccess = (JDBCDiskCachePoolAccess) pools.get( poolName );
+
+        if ( poolAccess == null )
+        {
+            JDBCDiskCachePoolAccessAttributes poolAttributes = configurePoolAccessAttributes( poolName );
+            try
+            {
+                try
+                {
+                    // org.gjt.mm.mysql.Driver
+                    Class.forName( poolAttributes.getDriverClassName() );
+                }
+                catch ( ClassNotFoundException e )
+                {
+                    log.error( "Couldn't find class for driver [" + poolAttributes.getDriverClassName() + "]", e );
+                }
+
+                poolAccess = new JDBCDiskCachePoolAccess( poolAttributes.getPoolName() );
+
+                poolAccess.setupDriver( poolAttributes.getUrl() + poolAttributes.getDatabase(), poolAttributes
+                    .getUserName(), poolAttributes.getPassword(), poolAttributes.getMaxActive() );
+
+                poolAccess.logDriverStats();
+                
+                pools.put( poolName, poolAccess );
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem creating connection pool.", e );
+            }
+        }
+
+        return poolAccess;
+    }
+
+    /**
+     * Configures the attributes using the properties.
+     * <p>
+     * @param poolName
+     * @return JDBCDiskCachePoolAccessAttributes
+     */
+    protected JDBCDiskCachePoolAccessAttributes configurePoolAccessAttributes( String poolName )
+    {
+        JDBCDiskCachePoolAccessAttributes poolAttributes = new JDBCDiskCachePoolAccessAttributes();
+
+        String poolAccessAttributePrefix = POOL_CONFIGURATION_PREFIX + poolName + ATTRIBUTE_PREFIX;
+        PropertySetter.setProperties( poolAttributes, getProps(), poolAccessAttributePrefix + "." );
+
+        poolAttributes.setPoolName( poolName );
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Configured attributes " + poolAttributes );
+        }
+        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: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/hsql/HSQLDiskCacheFactory.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/hsql/HSQLDiskCacheFactory.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/hsql/HSQLDiskCacheFactory.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/hsql/HSQLDiskCacheFactory.java Fri Oct 10 14:15:45 2008
@@ -36,6 +36,7 @@
 import org.apache.jcs.auxiliary.disk.jdbc.JDBCDiskCacheManager;
 import org.apache.jcs.engine.behavior.ICompositeCacheManager;
 import org.apache.jcs.engine.behavior.IElementSerializer;
+import org.apache.jcs.engine.control.CompositeCacheManager;
 import org.apache.jcs.engine.logging.behavior.ICacheEventLogger;
 
 /**
@@ -68,6 +69,7 @@
                                        ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
     {
         JDBCDiskCacheManager mgr = JDBCDiskCacheManager.getInstance( (JDBCDiskCacheAttributes) rawAttr,
+                                                                     CompositeCacheManager.getUnconfiguredInstance(),
                                                                      cacheEventLogger, elementSerializer );
         try
         {

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java Fri Oct 10 14:15:45 2008
@@ -26,6 +26,7 @@
 import org.apache.jcs.auxiliary.disk.jdbc.JDBCDiskCache;
 import org.apache.jcs.auxiliary.disk.jdbc.TableState;
 import org.apache.jcs.engine.behavior.ICacheElement;
+import org.apache.jcs.engine.behavior.ICompositeCacheManager;
 
 /**
  * The MySQLDiskCache extends the core JDBCDiskCache.
@@ -53,10 +54,11 @@
      * <p>
      * @param attributes
      * @param tableState
+     * @param compositeCacheManager 
      */
-    public MySQLDiskCache( MySQLDiskCacheAttributes attributes, TableState tableState )
+    public MySQLDiskCache( MySQLDiskCacheAttributes attributes, TableState tableState, ICompositeCacheManager compositeCacheManager )
     {
-        super( attributes, tableState );
+        super( attributes, tableState, compositeCacheManager );
 
         mySQLDiskCacheAttributes = attributes;
 

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheFactory.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheFactory.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheFactory.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheFactory.java Fri Oct 10 14:15:45 2008
@@ -49,7 +49,7 @@
     public AuxiliaryCache createCache( AuxiliaryCacheAttributes rawAttr, ICompositeCacheManager cacheManager,
                                        ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
     {
-        MySQLDiskCacheManager mgr = MySQLDiskCacheManager.getInstance( (MySQLDiskCacheAttributes) rawAttr, cacheEventLogger, elementSerializer );
+        MySQLDiskCacheManager mgr = MySQLDiskCacheManager.getInstance( (MySQLDiskCacheAttributes) rawAttr, cacheManager, cacheEventLogger, elementSerializer );
         return mgr.getCache( (MySQLDiskCacheAttributes) rawAttr );
     }
 

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheManager.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheManager.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheManager.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheManager.java Fri Oct 10 14:15:45 2008
@@ -31,6 +31,7 @@
 import org.apache.jcs.auxiliary.disk.jdbc.TableState;
 import org.apache.jcs.auxiliary.disk.jdbc.mysql.util.ScheduleFormatException;
 import org.apache.jcs.auxiliary.disk.jdbc.mysql.util.ScheduleParser;
+import org.apache.jcs.engine.behavior.ICompositeCacheManager;
 import org.apache.jcs.engine.behavior.IElementSerializer;
 import org.apache.jcs.engine.logging.behavior.ICacheEventLogger;
 
@@ -61,15 +62,19 @@
 
     /** for schedule optimizations */
     private Timer daemon = null;
+    
+    /** The cache manager instance */
+    private ICompositeCacheManager compositeCacheManager;    
 
     /**
      * Constructor for the HSQLCacheManager object
      * <p>
      * @param cattr
+     * @param compositeCacheManager 
      * @param cacheEventLogger
      * @param elementSerializer
      */
-    private MySQLDiskCacheManager( MySQLDiskCacheAttributes cattr,
+    private MySQLDiskCacheManager( MySQLDiskCacheAttributes cattr, ICompositeCacheManager compositeCacheManager,
                                    ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
     {
         if ( log.isInfoEnabled() )
@@ -79,6 +84,7 @@
         defaultJDBCDiskCacheAttributes = cattr;
         setElementSerializer( elementSerializer );
         setCacheEventLogger( cacheEventLogger );        
+        setCompositeCacheManager( compositeCacheManager );        
     }
 
     /**
@@ -95,11 +101,12 @@
      * Gets the instance attribute of the HSQLCacheManager class
      * <p>
      * @param cattr
+     * @param compositeCacheManager 
      * @param cacheEventLogger
      * @param elementSerializer
      * @return The instance value
      */
-    public static MySQLDiskCacheManager getInstance( MySQLDiskCacheAttributes cattr,
+    public static MySQLDiskCacheManager getInstance( MySQLDiskCacheAttributes cattr, ICompositeCacheManager compositeCacheManager,
                                                      ICacheEventLogger cacheEventLogger,
                                                      IElementSerializer elementSerializer )
     {
@@ -107,7 +114,7 @@
         {
             if ( instance == null )
             {
-                instance = new MySQLDiskCacheManager( cattr, cacheEventLogger, elementSerializer );
+                instance = new MySQLDiskCacheManager( cattr, compositeCacheManager, cacheEventLogger, elementSerializer );
             }
         }
         clients++;
@@ -136,7 +143,7 @@
      */
     protected AuxiliaryCache createJDBCDiskCache( JDBCDiskCacheAttributes cattr, TableState tableState )
     {
-        AuxiliaryCache raf = new MySQLDiskCache( (MySQLDiskCacheAttributes) cattr, tableState );
+        AuxiliaryCache raf = new MySQLDiskCache( (MySQLDiskCacheAttributes) cattr, tableState, getCompositeCacheManager() );
 
         scheduleOptimizations( (MySQLDiskCacheAttributes) cattr, tableState );
 
@@ -144,6 +151,21 @@
     }
 
     /**
+     * @param compositeCacheManager the compositeCacheManager to set
+     */
+    protected void setCompositeCacheManager( ICompositeCacheManager compositeCacheManager )
+    {
+        this.compositeCacheManager = compositeCacheManager;
+    }
+
+    /**
+     * @return the compositeCacheManager
+     */
+    protected ICompositeCacheManager getCompositeCacheManager()
+    {
+        return compositeCacheManager;
+    }
+    /**
      * For each time in the optimization schedule, this calls schedule Optimizaiton.
      * <p>
      * @param attributes

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/PooledCacheEventQueue.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/PooledCacheEventQueue.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/PooledCacheEventQueue.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/PooledCacheEventQueue.java Fri Oct 10 14:15:45 2008
@@ -63,19 +63,25 @@
     if the queue is empty.   make configurable later */
     private int waitToDieMillis = 10000;
 
+    /** The listener to process events */
     private ICacheListener listener;
 
+    /** The listener id */
     private long listenerId;
 
+    /** The name of the cache */
     private String cacheName;
 
+    /** Max failures before self destruction */
     private int maxFailure;
 
     /** in milliseconds */
     private int waitBeforeRetry;
 
+    /** Has the pool been destroyed */
     private boolean destroyed = true;
 
+    /** Is it working */
     private boolean working = true;
 
     /** The Thread Pool to execute events with. */
@@ -99,7 +105,7 @@
 
     /**
      * Initializes the queue.
-     * <,p>
+     * <p>
      * @param listener
      * @param listenerId
      * @param cacheName

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheManager.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheManager.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheManager.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheManager.java Fri Oct 10 14:15:45 2008
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import java.util.Properties;
+
 import org.apache.jcs.engine.control.CompositeCache;
 
 /**
@@ -34,5 +36,12 @@
      * @param cacheName
      * @return CompositeCache
      */
-    public abstract CompositeCache getCache( String cacheName );
+    CompositeCache getCache( String cacheName );
+    
+    /**
+     * This is exposed so other manager can get access to the props.
+     * <p>
+     * @return the configurationProperties
+     */
+    Properties getConfigurationProperties();
 }

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java Fri Oct 10 14:15:45 2008
@@ -133,7 +133,7 @@
         long start = System.currentTimeMillis();
 
         // store props for use by non configured caches
-        compositeCacheManager.props = properties;
+        compositeCacheManager.setConfigurationProperties( properties );
 
         // set default value list
         setDefaultAuxValues( properties );

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java Fri Oct 10 14:15:45 2008
@@ -88,8 +88,8 @@
     /** Used to keep track of attributes for auxiliaries. */
     protected Hashtable auxiliaryAttributeRegistry = new Hashtable( 11 );
 
-    /** Properties with which this manager was configured */
-    protected Properties props;
+    /** Properties with which this manager was configured. This is exposed for other managers. */
+    private Properties configurationProperties;
 
     /** The default auxiliary caches to be used if not preconfigured */
     protected String defaultAuxValues;
@@ -167,7 +167,7 @@
         {
             if ( log.isInfoEnabled() )
             {
-                log.info( "Instance is null, creating with provided config" );
+                log.info( "Instance is null, returning unconfigured instance" );
             }
 
             instance = createInstance();
@@ -281,7 +281,6 @@
     {
         if ( props != null )
         {
-
             if ( useSystemProperties )
             {
                 // override any setting with values from the system properties.
@@ -302,10 +301,12 @@
                 }
             }
 
+            // We will expose this for managers that need raw properties.
+            this.configurationProperties = props;
+
             // set the props value and then configure the ThreadPoolManager
             ThreadPoolManager.setProps( props );
             ThreadPoolManager poolMgr = ThreadPoolManager.getInstance();
-
             if ( log.isDebugEnabled() )
             {
                 log.debug( "ThreadPoolManager = " + poolMgr );
@@ -315,8 +316,6 @@
             CompositeCacheConfigurator configurator = new CompositeCacheConfigurator( this );
 
             configurator.doConfigure( props );
-
-            this.props = props;
         }
         else
         {
@@ -444,7 +443,8 @@
 
                 CompositeCacheConfigurator configurator = new CompositeCacheConfigurator( this );
 
-                cache = configurator.parseRegion( this.props, cattr.getCacheName(), this.defaultAuxValues, cattr );
+                cache = configurator.parseRegion( this.getConfigurationProperties(), cattr.getCacheName(),
+                                                  this.defaultAuxValues, cattr );
 
                 caches.put( cattr.getCacheName(), cache );
             }
@@ -696,6 +696,26 @@
     }
 
     /**
+     * This is exposed so other manager can get access to the props.
+     * <p>
+     * @param props
+     */
+    public void setConfigurationProperties( Properties props )
+    {
+        this.configurationProperties = props;
+    }
+
+    /**
+     * This is exposed so other manager can get access to the props.
+     * <p>
+     * @return the configurationProperties
+     */
+    public Properties getConfigurationProperties()
+    {
+        return configurationProperties;
+    }
+
+    /**
      * Called on shutdown. This gives use a chance to store the keys and to optimize even if the
      * cache manager's shutdown method was not called manually.
      */

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/utils/threadpool/ThreadPoolManager.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/utils/threadpool/ThreadPoolManager.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/utils/threadpool/ThreadPoolManager.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/utils/threadpool/ThreadPoolManager.java Fri Oct 10 14:15:45 2008
@@ -103,10 +103,11 @@
     /** The deafult config, created using propety defaults if present, else those above. */
     private static PoolConfiguration defaultConfig;
 
-    /**
-     * This is the default value. Setting this after inialization will have no effect.
-     */
-    private static String propsFileName = "cache.ccf";
+    /** This is the default value. */
+    public static final String DEFAULT_PROPS_FILE_NAME = "cache.ccf";
+    
+    /** Setting this after inialization will have no effect.  */
+    private static String propsFileName = null;
 
     /** the root property name */
     private static String PROP_NAME_ROOT = "thread_pool";

Added: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/HsqlSetupTableUtil.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/HsqlSetupTableUtil.java?rev=703574&view=auto
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/HsqlSetupTableUtil.java (added)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/HsqlSetupTableUtil.java Fri Oct 10 14:15:45 2008
@@ -0,0 +1,80 @@
+package org.apache.jcs.auxiliary.disk.jdbc;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+/** Can use this to setup a table. */
+public class HsqlSetupTableUtil
+{
+    /**
+     * SETUP a TABLE FOR CACHE testing
+     * <p>
+     * @param cConn
+     * @param tableName 
+     */
+    public static void setupTABLE( Connection cConn, String tableName )
+    {
+        boolean newT = true;
+
+        StringBuffer createSql = new StringBuffer();
+        createSql.append( "CREATE CACHED TABLE " + tableName + " " );
+        createSql.append( "( " );
+        createSql.append( "CACHE_KEY             VARCHAR(250)          NOT NULL, " );
+        createSql.append( "REGION                VARCHAR(250)          NOT NULL, " );
+        createSql.append( "ELEMENT               BINARY, " );
+        createSql.append( "CREATE_TIME           DATE, " );
+        createSql.append( "CREATE_TIME_SECONDS   BIGINT, " );
+        createSql.append( "MAX_LIFE_SECONDS      BIGINT, " );
+        createSql.append( "SYSTEM_EXPIRE_TIME_SECONDS      BIGINT, " );
+        createSql.append( "IS_ETERNAL            CHAR(1), " );
+        createSql.append( "PRIMARY KEY (CACHE_KEY, REGION) " );
+        createSql.append( ");" );
+
+        Statement sStatement = null;
+        try
+        {
+            sStatement = cConn.createStatement();
+        }
+        catch ( SQLException e )
+        {
+            e.printStackTrace();
+        }
+
+        try
+        {
+            sStatement.executeQuery( createSql.toString() );
+            sStatement.close();
+        }
+        catch ( SQLException e )
+        {
+            if ( e.toString().indexOf( "already exists" ) != -1 )
+            {
+                newT = false;
+            }
+            else
+            {
+                // TODO figure out if it exists prior to trying to create it.
+                // log.error( "Problem creating table.", e );
+                e.printStackTrace();
+            }
+        }
+
+        String setupData[] = { "create index iKEY on JCS_STORE2 (CACHE_KEY, REGION)" };
+
+        if ( newT )
+        {
+            for ( int i = 1; i < setupData.length; i++ )
+            {
+                try
+                {
+                    sStatement.executeQuery( setupData[i] );
+                }
+                catch ( SQLException e )
+                {
+                    System.out.println( "Exception: " + e );
+                }
+            }
+        } // end ifnew
+    }
+}

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheManagerUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheManagerUnitTest.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheManagerUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheManagerUnitTest.java Fri Oct 10 14:15:45 2008
@@ -4,6 +4,7 @@
 
 import org.apache.jcs.auxiliary.MockCacheEventLogger;
 import org.apache.jcs.engine.behavior.IElementSerializer;
+import org.apache.jcs.engine.control.CompositeCacheManager;
 import org.apache.jcs.engine.control.MockElementSerializer;
 import org.apache.jcs.engine.logging.behavior.ICacheEventLogger;
 
@@ -22,8 +23,8 @@
         ICacheEventLogger cacheEventLogger = new MockCacheEventLogger();
         IElementSerializer elementSerializer = new MockElementSerializer();
 
-        JDBCDiskCacheManager manager = JDBCDiskCacheManager.getInstance( defaultCacheAttributes, cacheEventLogger,
-                                                                         elementSerializer );
+        JDBCDiskCacheManager manager = JDBCDiskCacheManager.getInstance( defaultCacheAttributes, CompositeCacheManager
+            .getUnconfiguredInstance(), cacheEventLogger, elementSerializer );
 
         // DO WORK
         JDBCDiskCache cache = (JDBCDiskCache) manager.getCache( cacheName );

Added: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManagerUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManagerUnitTest.java?rev=703574&view=auto
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManagerUnitTest.java (added)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManagerUnitTest.java Fri Oct 10 14:15:45 2008
@@ -0,0 +1,93 @@
+package org.apache.jcs.auxiliary.disk.jdbc;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+/** Unit tests for the pool manager */
+public class JDBCDiskCachePoolAccessManagerUnitTest
+    extends TestCase
+{
+    /** Verify that we can configure the object based on the props. */
+    public void testConfigurePoolAccessAttributes_Simple()
+    {
+        // SETUP
+        String poolName = "testConfigurePoolAccessAttributes_Simple";
+
+        String url = "adfads";
+        String userName = "zvzvz";
+        String password = "qewrrewq";
+        int maxActive = 10;
+        String driverClassName = "org.hsqldb.jdbcDriver";
+
+        Properties props = new Properties();
+        String prefix = JDBCDiskCachePoolAccessManager.POOL_CONFIGURATION_PREFIX + poolName
+            + JDBCDiskCachePoolAccessManager.ATTRIBUTE_PREFIX;
+        props.put( prefix + ".url", url );
+        props.put( prefix + ".userName", userName );
+        props.put( prefix + ".password", password );
+        props.put( prefix + ".maxActive", String.valueOf( maxActive ) );
+        props.put( prefix + ".driverClassName", driverClassName );
+
+        JDBCDiskCachePoolAccessManager manager = JDBCDiskCachePoolAccessManager.getInstance( props );
+
+        // DO WORK
+        JDBCDiskCachePoolAccessAttributes result = manager.configurePoolAccessAttributes( poolName );
+
+        // VERIFY
+        assertEquals( "Wrong url value", url, result.getUrl() );
+        assertEquals( "Wrong userName value", userName, result.getUserName() );
+        assertEquals( "Wrong password value", password, result.getPassword() );
+        assertEquals( "Wrong maxActive value", maxActive, result.getMaxActive() );
+        assertEquals( "Wrong driverClassName value", driverClassName, result.getDriverClassName() );
+    }
+
+    /**
+     * Verify that we can get access.
+     * <p>
+     * @throws Exception
+     */
+    public void testGetJDBCDiskCachePoolAccess_Simple()
+        throws Exception
+    {
+        // SETUP
+        String poolName = "testGetJDBCDiskCachePoolAccess_Simple";
+
+        String url = "jdbc:hsqldb:";
+        String userName = "sa";
+        String password = "";
+        int maxActive = 10;
+        String driverClassName = "org.hsqldb.jdbcDriver";
+
+        Properties props = new Properties();
+        String prefix = JDBCDiskCachePoolAccessManager.POOL_CONFIGURATION_PREFIX + poolName
+            + JDBCDiskCachePoolAccessManager.ATTRIBUTE_PREFIX;
+        props.put( prefix + ".url", url );
+        props.put( prefix + ".userName", userName );
+        props.put( prefix + ".password", password );
+        props.put( prefix + ".maxActive", String.valueOf( maxActive ) );
+        props.put( prefix + ".driverClassName", driverClassName );
+
+        JDBCDiskCachePoolAccessManager manager = JDBCDiskCachePoolAccessManager.getInstance( props );
+        // in case another test has initilized this
+        manager.setProps( props );
+
+        System.setProperty( "hsqldb.cache_scale", "8" );
+
+        String rafroot = "target";
+        String database = rafroot + "/cache_hsql_db";
+
+        new org.hsqldb.jdbcDriver();
+        Class.forName( driverClassName ).newInstance();
+        Connection cConn = DriverManager.getConnection( url + database, userName, password );
+        HsqlSetupTableUtil.setupTABLE( cConn, "JCSTESTTABLE_ACCESS" );
+
+        // DO WORK
+        JDBCDiskCachePoolAccess result = manager.getJDBCDiskCachePoolAccess( poolName );
+
+        // VERIFY
+        assertNotNull( "Should have an access class", result );
+    }
+}

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheUnitTest.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheUnitTest.java Fri Oct 10 14:15:45 2008
@@ -21,8 +21,6 @@
 
 import java.sql.Connection;
 import java.sql.DriverManager;
-import java.sql.SQLException;
-import java.sql.Statement;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Properties;
@@ -32,6 +30,7 @@
 
 import org.apache.jcs.JCS;
 import org.apache.jcs.engine.behavior.ICacheElement;
+import org.apache.jcs.engine.control.MockCompositeCacheManager;
 
 /**
  * Runs basic tests for the JDBC disk cache.
@@ -68,7 +67,7 @@
         Class.forName( driver ).newInstance();
         Connection cConn = DriverManager.getConnection( url + database, user, password );
 
-        setupTABLE( cConn );
+        HsqlSetupTableUtil.setupTABLE( cConn, "JCS_STORE2" );
 
         runTestForRegion( "testCache1", 200 );
     }
@@ -139,71 +138,55 @@
     }
 
     /**
-     * SETUP TABLE FOR CACHE
-     * @param cConn
+     * Verfiy that it uses the pool access manager config.
+     * <p>
+     * @throws Exception
      */
-    void setupTABLE( Connection cConn )
+    public void testInitializePoolAccess_withPoolName()
+        throws Exception
     {
-        boolean newT = true;
+        // SETUP
+        String poolName = "testInitializePoolAccess_withPoolName";
+
+        String url = "jdbc:hsqldb:";
+        String userName = "sa";
+        String password = "";
+        int maxActive = 10;
+        String driverClassName = "org.hsqldb.jdbcDriver";
+
+        Properties props = new Properties();
+        String prefix = JDBCDiskCachePoolAccessManager.POOL_CONFIGURATION_PREFIX + poolName
+            + JDBCDiskCachePoolAccessManager.ATTRIBUTE_PREFIX;
+        props.put( prefix + ".url", url );
+        props.put( prefix + ".userName", userName );
+        props.put( prefix + ".password", password );
+        props.put( prefix + ".maxActive", String.valueOf( maxActive ) );
+        props.put( prefix + ".driverClassName", driverClassName );
+
+        JDBCDiskCacheAttributes cattr = new JDBCDiskCacheAttributes();
+        cattr.setConnectionPoolName( poolName );
+
+        TableState tableState = new TableState( "JCSTESTTABLE_InitializePoolAccess" );
+        MockCompositeCacheManager compositeCacheManager = new MockCompositeCacheManager();
+        compositeCacheManager.setConfigurationProperties( props );
+
+        JDBCDiskCache diskCache = new JDBCDiskCache( cattr, tableState, compositeCacheManager );
 
-        StringBuffer createSql = new StringBuffer();
-        createSql.append( "CREATE CACHED TABLE JCS_STORE2 " );
-        createSql.append( "( " );
-        createSql.append( "CACHE_KEY             VARCHAR(250)          NOT NULL, " );
-        createSql.append( "REGION                VARCHAR(250)          NOT NULL, " );
-        createSql.append( "ELEMENT               BINARY, " );
-        createSql.append( "CREATE_TIME           DATE, " );
-        createSql.append( "CREATE_TIME_SECONDS   BIGINT, " );
-        createSql.append( "MAX_LIFE_SECONDS      BIGINT, " );
-        createSql.append( "SYSTEM_EXPIRE_TIME_SECONDS      BIGINT, " );
-        createSql.append( "IS_ETERNAL            CHAR(1), " );
-        createSql.append( "PRIMARY KEY (CACHE_KEY, REGION) " );
-        createSql.append( ");" );
-
-        Statement sStatement = null;
-        try
-        {
-            sStatement = cConn.createStatement();
-        }
-        catch ( SQLException e )
-        {
-            e.printStackTrace();
-        }
-
-        try
-        {
-            sStatement.executeQuery( createSql.toString() );
-            sStatement.close();
-        }
-        catch ( SQLException e )
-        {
-            if ( e.toString().indexOf( "already exists" ) != -1 )
-            {
-                newT = false;
-            }
-            else
-            {
-                // TODO figure out if it exists prior to trying to create it.
-                // log.error( "Problem creating table.", e );
-                e.printStackTrace();
-            }
-        }
-
-        String setupData[] = { "create index iKEY on JCS_STORE2 (CACHE_KEY, REGION)" };
-
-        if ( newT )
-        {
-            for ( int i = 1; i < setupData.length; i++ )
-            {
-                try
-                {
-                    sStatement.executeQuery( setupData[i] );
-                }
-                catch ( SQLException e )
-                {
-                    System.out.println( "Exception: " + e );
-                }
-            }
-        } // end ifnew
+        System.setProperty( "hsqldb.cache_scale", "8" );
+
+        String rafroot = "target";
+        String database = rafroot + "/cache_hsql_db";
+
+        new org.hsqldb.jdbcDriver();
+        Class.forName( driverClassName ).newInstance();
+        Connection cConn = DriverManager.getConnection( url + database, userName, password );
+        HsqlSetupTableUtil.setupTABLE( cConn, "JCSTESTTABLE_InitializePoolAccess" );
+
+        // DO WORK
+        JDBCDiskCachePoolAccess result = diskCache.initializePoolAccess( cattr, compositeCacheManager );
+
+        // VEIFY
+        assertNotNull( "Should have an access class", result );
+        assertEquals( "wrong name", poolName, result.getPoolName() );
     }
 }

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheManagerUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheManagerUnitTest.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheManagerUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheManagerUnitTest.java Fri Oct 10 14:15:45 2008
@@ -4,6 +4,7 @@
 
 import org.apache.jcs.auxiliary.MockCacheEventLogger;
 import org.apache.jcs.engine.behavior.IElementSerializer;
+import org.apache.jcs.engine.control.CompositeCacheManager;
 import org.apache.jcs.engine.control.MockElementSerializer;
 import org.apache.jcs.engine.logging.behavior.ICacheEventLogger;
 
@@ -22,7 +23,7 @@
         ICacheEventLogger cacheEventLogger = new MockCacheEventLogger();
         IElementSerializer elementSerializer = new MockElementSerializer();
 
-        MySQLDiskCacheManager manager = MySQLDiskCacheManager.getInstance( defaultCacheAttributes, cacheEventLogger,
+        MySQLDiskCacheManager manager = MySQLDiskCacheManager.getInstance( defaultCacheAttributes, CompositeCacheManager.getUnconfiguredInstance(), cacheEventLogger,
                                                                            elementSerializer );
 
         // DO WORK

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheUnitTest.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheUnitTest.java Fri Oct 10 14:15:45 2008
@@ -22,6 +22,7 @@
 import junit.framework.TestCase;
 
 import org.apache.jcs.auxiliary.disk.jdbc.TableState;
+import org.apache.jcs.engine.control.CompositeCacheManager;
 
 /**
  * Simple tests for the MySQLDisk Cache.
@@ -51,7 +52,7 @@
         TableState tableState = new TableState( tableName );
         tableState.setState( TableState.OPTIMIZATION_RUNNING );
 
-        MySQLDiskCache cache = new MySQLDiskCache( attributes, tableState );
+        MySQLDiskCache cache = new MySQLDiskCache( attributes, tableState, CompositeCacheManager.getUnconfiguredInstance() );
 
         Object result = cache.processGet( "myKey" );
         assertNull( "The result should be null", result );

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/engine/control/MockCompositeCacheManager.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/engine/control/MockCompositeCacheManager.java?rev=703574&r1=703573&r2=703574&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/engine/control/MockCompositeCacheManager.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/engine/control/MockCompositeCacheManager.java Fri Oct 10 14:15:45 2008
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import java.util.Properties;
+
 import org.apache.jcs.engine.CompositeCacheAttributes;
 import org.apache.jcs.engine.ElementAttributes;
 import org.apache.jcs.engine.behavior.ICompositeCacheManager;
@@ -30,6 +32,9 @@
     /** The cache that was returned. */
     private CompositeCache cache;
 
+    /** Properties with which this manager was configured. This is exposed for other managers. */
+    private Properties configurationProperties;
+    
     /**
      * @param cacheName 
      * @return Returns a CompositeCache
@@ -61,4 +66,24 @@
     {
         return cache;
     }
+    
+    /**
+     * This is exposed so other manager can get access to the props.
+     * <p>
+     * @param props
+     */
+    public void setConfigurationProperties( Properties props )
+    {
+        this.configurationProperties = props;
+    }
+
+    /**
+     * This is exposed so other manager can get access to the props.
+     * <p>
+     * @return the configurationProperties
+     */
+    public Properties getConfigurationProperties()
+    {
+        return configurationProperties;
+    }
 }