package org.infinispan.demo;
import java.io.IOException;
import java.util.Iterator;
import org.infinispan.Cache;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.Configuration;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.remoting.transport.Transport;
import com.martiansoftware.jsap.JSAPException;
import com.martiansoftware.jsap.JSAPResult;
import com.martiansoftware.jsap.SimpleJSAP;
public abstract class Demo {
protected final boolean isMaster;
protected final String cfgFile;
protected final JSAPResult commandLineOptions;
protected SimpleJSAP jsap;
public Demo(String[] args) throws Exception {
commandLineOptions = parseParameters(args);
String nodeType = commandLineOptions.getString("nodeType");
isMaster = nodeType != null && nodeType.equals("master");
cfgFile = commandLineOptions.getString("configFile");
if (cfgFile == null) {
System.err.println(jsap.getHelp());
System.exit(1);
}
}
protected JSAPResult parseParameters(String[] args) throws Exception {
jsap = buildCommandLineOptions();
JSAPResult config = jsap.parse(args);
if (!config.success() || jsap.messagePrinted()) {
Iterator<?> messageIterator = config.getErrorMessageIterator();
while (messageIterator.hasNext()) System.err.println(messageIterator.next());
System.err.println(jsap.getHelp());
System.exit(1);
}
return config;
}
protected Cache<String, String> startCache() throws IOException {
CacheBuilder cb = new CacheBuilder(cfgFile);
EmbeddedCacheManager cacheManager = cb.getCacheManager();
Configuration dcc = cacheManager.getDefaultCacheConfiguration();
cacheManager.defineConfiguration("wordcount", new ConfigurationBuilder().read(dcc)
.clustering().l1().disable().clustering().cacheMode(CacheMode.DIST_SYNC).hash()
.numOwners(1).build());
Cache<String, String> cache = cacheManager.getCache();
Transport transport = cache.getAdvancedCache().getRpcManager().getTransport();
if (isMaster)
System.out.printf("Node %s joined as master. View is %s.%n", transport.getAddress(), transport.getMembers());
else
System.out.printf("Node %s joined as slave. View is %s.%n", transport.getAddress(), transport.getMembers());
return cache;
}
protected abstract SimpleJSAP buildCommandLineOptions() throws JSAPException;
}