@Override
  public final TreeNode getRoot() {
    if (disposed || !isValidThread()) return null;
    if (!root.isValid()) {
      Node newRoot = getValidRoot();
      root.set(newRoot);
      if (LOG.isTraceEnabled()) LOG.debug("root updated: ", newRoot);
    }
    return root.get();
  }
@Override
  public final TreeNode getRoot()