package edu.berkeley.thebes.hat.server; import edu.berkeley.thebes.common.persistence.disk.BDBPersistenceEngine; import edu.berkeley.thebes.common.persistence.disk.LevelDBPersistenceEngine; import edu.berkeley.thebes.common.persistence.disk.WriteAheadLogger; import org.slf4j.LoggerFactory; import javax.naming.ConfigurationException; import edu.berkeley.thebes.common.config.Config; import edu.berkeley.thebes.common.config.ConfigParameterTypes.PersistenceEngine; import edu.berkeley.thebes.common.config.ConfigParameterTypes.TransactionMode; import edu.berkeley.thebes.common.log4j.Log4JConfig; import edu.berkeley.thebes.common.persistence.IPersistenceEngine; import edu.berkeley.thebes.common.persistence.memory.MemoryPersistenceEngine; import edu.berkeley.thebes.common.thrift.ThriftServer; import edu.berkeley.thebes.hat.common.thrift.ReplicaService; import edu.berkeley.thebes.hat.server.antientropy.AntiEntropyServer; import edu.berkeley.thebes.hat.server.antientropy.AntiEntropyServiceHandler; import edu.berkeley.thebes.hat.server.antientropy.clustering.AntiEntropyServiceRouter; import edu.berkeley.thebes.hat.server.dependencies.DependencyResolver; import edu.berkeley.thebes.hat.server.replica.ReplicaServiceHandler; public class ThebesHATServer { private static org.slf4j.Logger logger = LoggerFactory.getLogger(ThebesHATServer.class); public static void main(String[] args) { try { Config.initializeServer(TransactionMode.HAT); Log4JConfig.configureLog4J(); IPersistenceEngine engine = Config.getPersistenceEngine(); engine.open(); AntiEntropyServiceRouter router = new AntiEntropyServiceRouter(); DependencyResolver dependencyResolver = new DependencyResolver(router, engine); AntiEntropyServiceHandler antiEntropyServiceHandler = new AntiEntropyServiceHandler(router, dependencyResolver, engine); AntiEntropyServer antiEntropyServer = new AntiEntropyServer(antiEntropyServiceHandler); if (!Config.isStandaloneServer()) { (new Thread(antiEntropyServer)).start(); } else { logger.debug("Server marked as standalone; not starting anti-entropy!"); } router.bootstrapAntiEntropyRouting(); ReplicaServiceHandler replicaServiceHandler = new ReplicaServiceHandler(engine, router, dependencyResolver); logger.debug("Starting the server..."); ThriftServer.startInCurrentThread( new ReplicaService.Processor<ReplicaServiceHandler>(replicaServiceHandler), Config.getServerBindIP()); } catch (Exception e) { logger.error("ERROR: ", e); e.printStackTrace(); } } }