package forklift.integration.server; import org.apache.zookeeper.server.ServerConfig; import org.apache.zookeeper.server.ZooKeeperServerMain; import org.apache.zookeeper.server.quorum.QuorumPeerConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; import java.util.Properties; /** * Embedded Zookeeper server */ public class ZookeeperService implements Runnable { private static final Logger log = LoggerFactory.getLogger(ZookeeperService.class); private ZookeeperServer server; private File dataDir = new File("src/test/resources/zookeeper"); Thread runningThread; private int clientPort; public ZookeeperService(int clientPort) { this.clientPort = clientPort; } @Override public void run() { runningThread = Thread.currentThread(); Properties properties = new Properties(); properties.setProperty("tickTime", "2000"); properties.setProperty("initLimit", "10"); properties.setProperty("dataDir", dataDir.getAbsolutePath()); properties.setProperty("clientPort", Integer.toString(clientPort)); QuorumPeerConfig quorumConfiguration = new QuorumPeerConfig(); try { quorumConfiguration.parseProperties(properties); final ServerConfig configuration = new ServerConfig(); configuration.readFrom(quorumConfiguration); server = new ZookeeperServer(); server.runFromConfig(configuration); } catch (Exception e) { log.error("Unable to start embedded zookeeper server", e); } } public void stop() throws InterruptedException, IOException { server.shutdown(); runningThread.interrupt(); Thread.sleep(1500); } public File getDataDirectoryFile() { return dataDir; } private class ZookeeperServer extends ZooKeeperServerMain{ @Override public void shutdown(){ super.shutdown(); } } }