Return-Path: Delivered-To: apmail-jakarta-jcs-dev-archive@www.apache.org Received: (qmail 84627 invoked from network); 19 Mar 2007 00:55:53 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 19 Mar 2007 00:55:53 -0000 Received: (qmail 45016 invoked by uid 500); 19 Mar 2007 00:56:01 -0000 Delivered-To: apmail-jakarta-jcs-dev-archive@jakarta.apache.org Received: (qmail 44931 invoked by uid 500); 19 Mar 2007 00:56:01 -0000 Mailing-List: contact jcs-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "JCS Developers List" Delivered-To: mailing list jcs-dev@jakarta.apache.org Received: (qmail 44920 invoked by uid 500); 19 Mar 2007 00:56:01 -0000 Delivered-To: apmail-jakarta-jcs-commits@jakarta.apache.org Received: (qmail 44917 invoked by uid 500); 19 Mar 2007 00:56:01 -0000 Delivered-To: apmail-jakarta-jcs-cvs@jakarta.apache.org Received: (qmail 44914 invoked by uid 99); 19 Mar 2007 00:56:01 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 18 Mar 2007 17:56:01 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 18 Mar 2007 17:55:52 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 575881A9838; Sun, 18 Mar 2007 17:55:32 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r519770 - in /jakarta/jcs/trunk/src: java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java test-conf/TestJDBCDiskCacheRemoval.ccf test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheRemovalUnitTest.java Date: Mon, 19 Mar 2007 00:55:32 -0000 To: jcs-cvs@jakarta.apache.org From: asmuts@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070319005532.575881A9838@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: asmuts Date: Sun Mar 18 17:55:31 2007 New Revision: 519770 URL: http://svn.apache.org/viewvc?view=rev&rev=519770 Log: FIX JCS-20 Fixed partial key removal sql bug. Added a unit test for the fix. Added: jakarta/jcs/trunk/src/test-conf/TestJDBCDiskCacheRemoval.ccf jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheRemovalUnitTest.java Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.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?view=diff&rev=519770&r1=519769&r2=519770 ============================================================================== --- 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 Sun Mar 18 17:55:31 2007 @@ -554,7 +554,7 @@ { // remove all keys of the same name group. sql = "delete from " + getJdbcDiskCacheAttributes().getTableName() + " where REGION = '" - + this.getCacheName() + "' and CACHE_KEY = like '" + key + "%'"; + + this.getCacheName() + "' and CACHE_KEY like '" + key + "%'"; } Connection con = poolAccess.getConnection(); Statement sStatement = null; @@ -567,7 +567,7 @@ } catch ( SQLException e ) { - log.error( "Problem creating statement.", e ); + log.error( "Problem creating statement. sql [" + sql + "]", e ); alive = false; } finally Added: jakarta/jcs/trunk/src/test-conf/TestJDBCDiskCacheRemoval.ccf URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test-conf/TestJDBCDiskCacheRemoval.ccf?view=auto&rev=519770 ============================================================================== --- jakarta/jcs/trunk/src/test-conf/TestJDBCDiskCacheRemoval.ccf (added) +++ jakarta/jcs/trunk/src/test-conf/TestJDBCDiskCacheRemoval.ccf Sun Mar 18 17:55:31 2007 @@ -0,0 +1,46 @@ +# Cache configuration for the 'TestHSQLDiskCache' test. The memory cache has a +# a maximum of 100 objects, so objects should get pushed into the disk cache + +jcs.default=JDBC +jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes +jcs.default.cacheattributes.MaxObjects=0 +jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache +jcs.default.cacheattributes.UseMemoryShrinker=false +jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=3600 +jcs.default.cacheattributes.ShrinkerIntervalSeconds=60 +jcs.default.elementattributes=org.apache.jcs.engine.ElementAttributes +jcs.default.elementattributes.IsEternal=false +jcs.default.elementattributes.MaxLifeSeconds=700 +jcs.default.elementattributes.IdleTime=1800 +jcs.default.elementattributes.IsSpool=true +jcs.default.elementattributes.IsRemote=true +jcs.default.elementattributes.IsLateral=true + +############################################################## +################## AUXILIARY CACHES AVAILABLE ################ +# JDBC disk cache +jcs.auxiliary.JDBC=org.apache.jcs.auxiliary.disk.jdbc.JDBCDiskCacheFactory +jcs.auxiliary.JDBC.attributes=org.apache.jcs.auxiliary.disk.jdbc.JDBCDiskCacheAttributes +jcs.auxiliary.JDBC.attributes.userName=sa +jcs.auxiliary.JDBC.attributes.password= +jcs.auxiliary.JDBC.attributes.url=jdbc:hsqldb:target/cache_hsql_db +jcs.auxiliary.JDBC.attributes.driverClassName=org.hsqldb.jdbcDriver +jcs.auxiliary.JDBC.attributes.tableName=${DATABASE_NAME} +jcs.auxiliary.JDBC.attributes.testBeforeInsert=false +jcs.auxiliary.JDBC.attributes.maxActive=15 +jcs.auxiliary.JDBC.attributes.allowRemoveAll=true +jcs.auxiliary.JDBC.attributes.MaxPurgatorySize=10000000 +jcs.auxiliary.JDBC.attributes.EventQueueType=POOLED +jcs.auxiliary.JDBC.attributes.EventQueuePoolName=disk_cache_event_queue + + +############################################################## +################## OPTIONAL THREAD POOL CONFIGURATION ######### +# Disk Cache pool +thread_pool.disk_cache_event_queue.useBoundary=false +thread_pool.disk_cache_event_queue.boundarySize=500 +thread_pool.disk_cache_event_queue.maximumPoolSize=15 +thread_pool.disk_cache_event_queue.minimumPoolSize=10 +thread_pool.disk_cache_event_queue.keepAliveTime=3500 +thread_pool.disk_cache_event_queue.whenBlockedPolicy=RUN +thread_pool.disk_cache_event_queue.startUpSize=10 Added: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheRemovalUnitTest.java URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheRemovalUnitTest.java?view=auto&rev=519770 ============================================================================== --- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheRemovalUnitTest.java (added) +++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheRemovalUnitTest.java Sun Mar 18 17:55:31 2007 @@ -0,0 +1,154 @@ +package org.apache.jcs.auxiliary.disk.jdbc; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Properties; + +import junit.framework.TestCase; + +import org.apache.jcs.JCS; + +/** Tests for the removal functionality. */ +public class JDBCDiskCacheRemovalUnitTest + extends TestCase +{ + /** db name -- set in system props */ + private String databaseName = "JCS_STORE_REMOVAL"; + + /** + * Test setup + */ + public void setUp() + { + System.setProperty( "DATABASE_NAME", databaseName ); + JCS.setConfigFilename( "/TestJDBCDiskCacheRemoval.ccf" ); + } + + /** + * Verify the fix for BUG JCS-20 + *

+ * Setup an hsql db. Add an item. Remove using partial key. + */ + public void testPartialKeyRemoval_Good() + throws Exception + { + // SETUP + setupDatabase(); + + String keyPart1 = "part1"; + String keyPart2 = "part2"; + String region = "testCache1"; + String data = "adfadsfasfddsafasasd"; + + JCS jcs = JCS.getInstance( region ); + + // DO WORK + jcs.put( keyPart1 + ":" + keyPart2, data ); + Thread.sleep( 1000 ); + + // VERIFY + String resultBeforeRemove = (String) jcs.get( keyPart1 + ":" + keyPart2 ); + assertEquals( "Wrong result", data, resultBeforeRemove ); + + jcs.remove( keyPart1 + ":" ); + String resultAfterRemove = (String) jcs.get( keyPart1 + ":" + keyPart2 ); + assertNull( "Should not have a result after removal.", resultAfterRemove ); + + System.out.println( jcs.getStats() ); + } + + /** + * Create the database. + * @throws SQLException + */ + private void setupDatabase() + throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException + { + System.setProperty( "hsqldb.cache_scale", "8" ); + + String rafroot = "target"; + Properties p = new Properties(); + String driver = p.getProperty( "driver", "org.hsqldb.jdbcDriver" ); + String url = p.getProperty( "url", "jdbc:hsqldb:" ); + String database = p.getProperty( "database", rafroot + "/cache_hsql_db" ); + String user = p.getProperty( "user", "sa" ); + String password = p.getProperty( "password", "" ); + + new org.hsqldb.jdbcDriver(); + Class.forName( driver ).newInstance(); + Connection cConn = DriverManager.getConnection( url + database, user, password ); + + setupTABLE( cConn ); + } + + /** + * SETUP TABLE FOR CACHE + * @param cConn + */ + private void setupTABLE( Connection cConn ) + { + boolean newT = true; + + StringBuffer createSql = new StringBuffer(); + createSql.append( "CREATE CACHED TABLE " + databaseName ); + 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 " + databaseName + " (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 + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: jcs-dev-unsubscribe@jakarta.apache.org For additional commands, e-mail: jcs-dev-help@jakarta.apache.org