package org.jboss.cache.loader;
import org.jboss.cache.Fqn;
import org.jboss.cache.TreeCache;
import org.jboss.cache.misc.TestingUtil;
import org.jboss.cache.xml.XmlHelper;
import org.w3c.dom.Element;
/**
* @author Bela Ban
* @version $Id: RpcDelegatingCacheLoaderTests.java 1838 2006-05-05 12:06:59Z msurtani $
*/
public class RpcDelegatingCacheLoaderTests {
TreeCache cache;
public static void main(String[] args) {
boolean client=false;
for(int i=0; i < args.length; i++) {
String arg=args[i];
if(arg.equals("client")) {
client=true;
continue;
}
if(arg.equals("server")) {
client=false;
continue;
}
help();
return;
}
try {
new RpcDelegatingCacheLoaderTests().start(client);
}
catch(Exception e) {
e.printStackTrace();
}
}
private static void help() {
System.out.println("RpcDelegatingCacheLoadeTest [client / server]");
}
private void start(boolean client) throws Exception {
cache=new TreeCache("test-cluster", null, 3000);
cache.setCacheMode(TreeCache.REPL_ASYNC);
cache.setFetchInMemoryState(true);
cache.setCacheLoaderConfiguration(getCacheLoaderConfig());
cache.setTransactionManagerLookupClass("org.jboss.cache.DummyTransactionManagerLookup");
cache.startService();
if(client == false) {
System.out.println("started as SERVER");
System.out.println("populating the cache");
cache.getTransactionManager().begin();
cache.put("/a/b/c", "bela", "ban");
cache.put("/1/2/3", "ben", "wang");
cache.getTransactionManager().commit();
System.out.println("the cache is " + cache.toString() + ", locks: " + cache.printLockInfo());
while(true){
TestingUtil.sleepThread(2000);
cache.getTransactionManager().begin();
cache.put("/x/y/z", "d", "d");
cache.getTransactionManager().commit();
}
}
System.out.println("started as CLIENT");
System.out.println("initial cache (fetched from SERVER) is " + cache.printLockInfo());
// int i=1;
// while(true) {
// cache.put("/elements/" + i, "key", "value");
// TestingUtil.sleepThread(1000);
// cache.evict(Fqn.fromString("/elements/" + i));
// i++;
// }
// TestingUtil.sleepThread a bit, because we use async repl, changes from the server may not yet have arrived
TestingUtil.sleepThread(1000);
System.out.println("evicting /a and /1 locally");
cache.evict(Fqn.fromString("/a/b/c"));
cache.evict(Fqn.fromString("/a/b"));
cache.evict(Fqn.fromString("/a"));
cache.evict(Fqn.fromString("/1/2/3"));
cache.evict(Fqn.fromString("/1/2"));
cache.evict(Fqn.fromString("/1"));
System.out.println("cache contents after eviction: " + cache.printLockInfo());
System.out.println("accessing /a and /1. this will trigger a fetch from the remote SERVER");
Object val=cache.get("/a/b/c", "bela");
System.out.println("value is " + val);
val=cache.get("/1/2/3", "ben");
System.out.println("value is " + val);
System.out.println("the cache is " + cache.toString() + ", locks: " + cache.printLockInfo());
}
protected Element getCacheLoaderConfig() throws Exception
{
String xml = " <config>\n" +
" \n" +
" <passivation>false</passivation>\n" +
" <preload></preload>\n" +
"\n" +
" <cacheloader>\n" +
" <class>org.jboss.cache.loader.RpcDelegatingCacheLoader</class>\n" +
" <async>false</async>\n" +
" <fetchPersistentState>false</fetchPersistentState>\n" +
" <ignoreModifications>false</ignoreModifications>\n" +
" </cacheloader>\n" +
" \n" +
" </config>";
return XmlHelper.stringToElement(xml);
}
}