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;
+ }
}