/* * JCSTest.java * * Created on Sept 10, 2003, 12:21 PM * * $Log$ */
//============================================================================== // Imports for JCS. //============================================================================== import org.apache.jcs.JCS; import org.apache.jcs.access.exception.*; //============================================================================== // Imports for java collections. //============================================================================== import java.util.*;
/**
* Tests JCS object cache functionality. Uses "cache.ccf" configuration file.
* Not a very realistic example, but shows how to put into and get from a cache.
* Also illustrates some properties of the key class, such as what functions it
* should implement.
*
* @author Craig Johannsen
*/
public class JCSTest {
/** Primary keys for Dog instances. */
private static final String DOG_ID_01 = "Goldie";
private static final String DOG_ID_02 = "Bowser";
/** Primary keys for Cat instances. */
private static final String CAT_ID_01 = "Fluffy";
private static final String CAT_ID_02 = "Blackie";
private static JCS dfltCache;
private static JCS dogCache;
private static JCS catCache;
private static Hashtable hashTable = new Hashtable();
private class Key { public String keyValue; public Key(String val) { keyValue = val; } public String getKeyValue() { return keyValue; } public boolean equals(Object obj) { System.out.println(">>>called equals"); if (obj instanceof Key) return keyValue.equals(((Key) obj).getKeyValue()); else if (obj instanceof String) return keyValue.equals(obj); else return false; } public int hashCode() { System.out.println(">>>called hashCode"); return keyValue.hashCode(); } public String toString() { return keyValue; } }
/** Note that cached items must be Serializable. */ private interface AnimalIF extends java.io.Serializable { void speak(); String getName(); String toString(); boolean equals(AnimalIF animal); }
private class Dog implements AnimalIF {
private String name;
public Dog(String name) { this.name = name; }
public String getName() { return name; }
public String toString() { return "A dog named " + name; }
public void speak() { System.out.println(name + " says 'Woof'"); }
public boolean equals(AnimalIF animal) { return name.equals(animal.getName()); }
}
private class Cat implements AnimalIF {
private String name;
public Cat(String name) { this.name = name; }
public String getName() { return name; }
public String toString() { return "A cat named " + name; }
public void speak() { System.out.println(name + " says 'Meow'"); }
public boolean equals(AnimalIF animal) { return name.equals(animal.getName()); }
}
/** Creates a new instance of TestJCS */ public JCSTest() { try { dfltCache = JCS.getInstance("dflt"); String dogCacheName = getCacheName(Dog.class); System.out.println("dogCache=" + dogCacheName); dogCache = JCS.getInstance(dogCacheName); String catCacheName = getCacheName(Cat.class); System.out.println("catCache=" + catCacheName); catCache = JCS.getInstance(catCacheName); } catch (CacheException e) { System.out.println("Error instantiating cache: " + e); System.exit(100); } }
public String getCacheName(Class objClass) { return objClass.getName(); }
public void doTest() { // Testing some hypotheses about Hashtable key comparisons. System.out.println(">>>Starting Hashtable Key test"); Key key1 = new Key("key1"); hashTable.put(key1, "key one"); Key key2 = new Key("key2"); hashTable.put(key2, "key two"); String val1 = (String) hashTable.get(key1); System.out.println("key1 value=" + val1); String val2 = (String) hashTable.get(key2); System.out.println("key2 value=" + val2);
// Testing some hypotheses about JCS key comparisons. System.out.println(">>>Starting JCS Key test"); try { dfltCache.put(key1.toString(), "key one"); dfltCache.put(key2.toString(), "key two"); val1 = (String) hashTable.get(key1.toString()); System.out.println("key1 value=" + val1); val2 = (String) hashTable.get(key2.toString()); System.out.println("key2 value=" + val2); } catch (Exception e) { System.out.println("Exception during KeyTest: " + e); e.printStackTrace(); }; System.out.println(">>>End of Key tests");
// Create some Dog instances Dog dog1 = new Dog(DOG_ID_01); Dog dog2 = new Dog(DOG_ID_02); System.out.println("dog1=" + dog1); System.out.println("dog2=" + dog2);
// Create some Cat instances AnimalIF cat1 = new Cat(CAT_ID_01); AnimalIF cat2 = new Cat(CAT_ID_02); System.out.println("cat1=" + cat1); System.out.println("cat2=" + cat2);
// Add each Dog and Cat instance to the dogCache or catCache. try { dogCache.put(dog1.getName(), dog1); dogCache.put(dog2.getName(), dog2); catCache.put(cat1.getName(), cat1); catCache.put(cat2.getName(), cat2); } catch (CacheException e) { System.out.println("Error putting animal object into cache: " + e); System.exit(100); }
// Ensure that we get the correct reg objects from the reg cache. Dog dog1a = (Dog)dogCache.get(DOG_ID_01); System.out.println("get dog1a=" + dog1a); if (dog1a == null) System.out.println(">>>ERROR: dog1a is null"); else if (! dog1a.equals(dog1)) System.out.println(">>>ERROR: dog1a does not match dog1"); else { System.out.println("dog1a is OK, obj=" + dog1a); dog1a.speak(); }
Dog dog2a = (Dog)dogCache.get(DOG_ID_02); System.out.println("get dog2a=" + dog2a); if (dog2a == null) System.out.println(">>>ERROR: dog2a is null"); else if (! dog2a.equals(dog2)) System.out.println(">>>ERROR: dog2a does not match dog2"); else { System.out.println("dog2a is OK, obj=" + dog2a); dog2a.speak(); }
Cat cat1a = (Cat)catCache.get(CAT_ID_01); System.out.println("get cat1a=" + cat1a); if (cat1a == null) System.out.println(">>>ERROR: cat1a is null"); else if (! cat1a.equals(cat1)) System.out.println(">>>ERROR: cat1a does not match cat1"); else { System.out.println("cat1a is OK, obj=" + cat1a); cat1a.speak(); }
Cat cat2a = (Cat)catCache.get(CAT_ID_02); System.out.println("get cat2a=" + cat2a); if (cat2a == null) System.out.println(">>>ERROR: cat2a is null"); else if (! cat2a.equals(cat2)) System.out.println(">>>ERROR: cat2a does not match cat2"); else { System.out.println("cat2a is OK, obj=" + cat2a); cat2a.speak(); }
// Test removal from the cache. try { dogCache.remove(DOG_ID_02); Dog dogX = (Dog) dogCache.get(DOG_ID_02); if (dogX != null) System.out.println(">>>ERROR: dogX is NOT null, obj=" + dogX); else System.out.println("dogX is OK (should be null), obj=" + dogX); } catch (CacheException e) { System.out.println(">>>Error removing dog2 from location cache: " + e); System.exit(100); } }
/** * The main program. */ public static void main(String[] args) { try { JCSTest test = new JCSTest(); test.doTest(); } catch(Exception e) { System.out.println("Uncaught error: " + e); e.printStackTrace(); } System.exit(0); }
}
==================================================================== File build.sh -- build script for Linux/Unix CP=".:your_lib/jcs.jar:your_lib/commons-lang.jar" javac -classpath $CP JCSTest.java
==================================================================== File run.sh -- run script for Linux/Unix (remember to "chmod +x run.sh") CP=".:/home/craigj/lib/jcs.jar:/home/craigj/lib/commons-lang.jar":/home/craigj/lib/commons-logging.jar java -classpath $CP JCSTest
==================================================================== File cache.ccf -- JCS configuration file # DEFAULT CACHE REGION jcs.default=DC jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes jcs.default.cacheattributes.MaxObjects=2000 jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache jcs.default.elementattributes=org.apache.jcs.engine.ElementAttributes jcs.default.elementattributes.IsEternal=false jcs.default.elementattributes.MaxLifeSeconds=2400 jcs.default.elementattributes.IdleTime=1800 jcs.default.elementattributes.IsSpool=false jcs.default.elementattributes.IsRemote=false jcs.default.elementattributes.IsLateral=false
#Dog Cache jcs.region.JCSTest$Dog= jcs.region.JCSTest$Dog.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes jcs.region.JCSTest$Dog.cacheattributes.MaxObjects=4000 jcs.region.JCSTest$Dog.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache jcs.region.JCSTest$Dog.cacheattributes.UseMemoryShrinker=true jcs.region.JCSTest$Dog.cacheattributes.MaxMemoryIdleTimeSeconds=3600 jcs.region.JCSTest$Dog.cacheattributes.ShrinkerIntervalSeconds=600 jcs.region.JCSTest$Dog.elementattributes=org.apache.jcs.engine.ElementAttributes jcs.region.JCSTest$Dog.elementattributes.IsEternal=false jcs.region.JCSTest$Dog.elementattributes.MaxLifeSeconds=2400 jcs.region.JCSTest$Dog.elementattributes.IdleTime=180 jcs.region.JCSTest$Dog.elementattributes.IsSpool=false jcs.region.JCSTest$Dog.elementattributes.IsRemote=false jcs.region.JCSTest$Dog.elementattributes.IsLateral=false
#Cat Cache jcs.region.JCSTest$Cat= jcs.region.JCSTest$Cat.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes jcs.region.JCSTest$Cat.cacheattributes.MaxObjects=4000 jcs.region.JCSTest$Cat.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache jcs.region.JCSTest$Cat.cacheattributes.UseMemoryShrinker=true jcs.region.JCSTest$Cat.cacheattributes.MaxMemoryIdleTimeSeconds=3600 jcs.region.JCSTest$Cat.cacheattributes.ShrinkerIntervalSeconds=600 jcs.region.JCSTest$Cat.elementattributes=org.apache.jcs.engine.ElementAttributes jcs.region.JCSTest$Cat.elementattributes.IsEternal=false jcs.region.JCSTest$Cat.elementattributes.MaxLifeSeconds=2400 jcs.region.JCSTest$Cat.elementattributes.IdleTime=180 jcs.region.JCSTest$Cat.elementattributes.IsSpool=false jcs.region.JCSTest$Cat.elementattributes.IsRemote=false jcs.region.JCSTest$Cat.elementattributes.IsLateral=false
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]