@Override
  public void get(final String listenTo, final Callback<T> callback)
  {
    String path = getPath(listenTo);
    // Note ChildrenCallback is compatible with a ZK 3.2 server; Children2Callback is
    // compatible only with ZK 3.3+ server.
    AsyncCallback.ChildrenCallback zkCallback = new AsyncCallback.ChildrenCallback()
    {
      @Override
      public void processResult(int rc, String path, Object context, List<String> children)
      {
        KeeperException.Code result = KeeperException.Code.get(rc);
        switch (result)
        {
          case NONODE:
            callback.onSuccess(null);
            break;

          case OK:
            getMergedChildren(path, _zookeeperChildFilter.filter(children), null, callback);
            break;

          default:
            callback.onError(KeeperException.create(result));
            break;
        }
      }
    };
    _zk.getChildren(path, null, zkCallback, null);
  }
@Test(groups = { "small", "back-end" })
  public void testShutdown()
          throws InterruptedException, IOException, PropertyStoreException, ExecutionException
  {
    PropertyStore<String> store = getStore();

    final FutureCallback<None> callback = new FutureCallback<>();
    store.shutdown(callback);
    try
    {
      callback.get(5, TimeUnit.SECONDS);
    }
    catch (InterruptedException | ExecutionException | TimeoutException e)
    {
      fail("unable to shut down store");
    }
  }