Description
with 3.7.0 ZooKeeper provides an official API to run a ZooKeeper node.
We should use that API in order to launch ZooKeeper, this way we won't have any compatibility issues.
In fact now (5.1) we are starting the ZooKeeper node using internal ZK classes, that are subject to change in the future.
The ZooKeeperServerEmbedded API is designed to be forward compatible.
It is a very skinny API, and it basically reproduces the usage for the users, that is to provide a configuration file and a base directory.
It also provides a way to prevent ZooKeeper to exit the JVM and to shutdown gracefully the server.
@TempDir Path tmpDir; @Test public void hello() throws Exception { Properties configuration = new Properties(); configuration.setProperty("clientPort", "2181"); try (ZooKeeperServerEmbedded embedded = ZooKeeperServerEmbedded .builder() .exitHandler(ExitHandler.LOG_ONLY) .baseDir(tmpDir) .configuration(configuration) .build();) { embedded.start(); CountDownLatch l = new CountDownLatch(1); try (ZooKeeper zk = new ZooKeeper("localhost:2181", 40000, new Watcher() { @Override public void process(WatchedEvent event) { System.out.println("event "+event) ; l.countDown(); } } )) { l.await(); System.out.println("WHOAMI"+ zk.whoAmI()); zk.create("/foo", "foo".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); } } }