package org.talend.esb.locator.zookeeper.server; import java.io.IOException; import java.util.Properties; import org.apache.zookeeper.server.ServerConfig; import org.apache.zookeeper.server.ZooKeeperServerMain; import org.apache.zookeeper.server.quorum.QuorumPeerConfig; import org.apache.zookeeper.server.quorum.QuorumPeerMain; public class ZookeeperServerImpl implements ZookeeperServer { ZookeeperServer serverInner; private ZookeeperServerImpl() { } public static ZookeeperServer getZookeeperServer(Properties props) throws Exception { QuorumPeerConfig config = new QuorumPeerConfig(); config.parseProperties(props); if (config.getServers().size() > 0) { return new MyQuorumPeerMain(config); } else { return new MyZooKeeperServerMain(config); } } public void startup() throws IOException { serverInner.startup(); } public void shutdown() { serverInner.shutdown(); } static class MyQuorumPeerMain extends QuorumPeerMain implements ZookeeperServer { private final QuorumPeerConfig config; MyQuorumPeerMain(QuorumPeerConfig config) { this.config = config; } public void startup() throws IOException { runFromConfig(config); } public void shutdown() { if(null != quorumPeer) { quorumPeer.shutdown(); } } } static class MyZooKeeperServerMain extends ZooKeeperServerMain implements ZookeeperServer { private final QuorumPeerConfig config; MyZooKeeperServerMain(QuorumPeerConfig config) { this.config = config; } public void startup() throws IOException { ServerConfig serverConfig = new ServerConfig(); serverConfig.readFrom(config); runFromConfig(serverConfig); } public void shutdown() { super.shutdown(); } } }