@Override
  // @wjw_note: 删除此server下的所有zookeeper上的数据!
  public void UnRegisterScheduleServer(ScheduleServer server) throws Exception {
    // 1. 删除server
    String zkPath = this.pathServer;
    if (this.getZooKeeper().exists(zkPath, false) != null) {
      ZKTools.deleteTree(this.getZooKeeper(), zkPath + "/" + server.getUuid());
    }

    // 2. 删除task
    zkPath = this.pathTask;
    if (this.getZooKeeper().exists(zkPath, false) == null) {
      return;
    }
    List<String> children = this.getZooKeeper().getChildren(zkPath, false);
    if (null == children || children.size() == 0) {
      return;
    }

    for (int i = 0; i < children.size(); i++) {
      String taskName = children.get(i);
      String taskPath = zkPath + "/" + taskName + "/" + server.getUuid();
      if (this.getZooKeeper().exists(taskPath, false) != null) {
        ZKTools.deleteTree(this.getZooKeeper(), taskPath);
      }
    }
  }
 void someTask() {
   try {
     server.Open(this);
   } catch (Throwable t) {
     Log.e("TestWebServer", t.getMessage());
   }
 }
  public void onDestroy() {
    try {
      server.Close();
    } catch (Throwable t) {
      Log.e("TestWebServer", t.getMessage());
    }

    super.onDestroy();
    Log.d("TestWebServer", "onDestroy");
  }
  @Override
  // @wjw_note: 在Zookeeper上注册ScheduleServer
  public void registerScheduleServer(ScheduleServer server) throws Exception {
    if (server.isRegisted() == true) {
      throw new Exception(server.getUuid() + " 被重复注册");
    }

    String realPath = null;
    // 此处必须增加UUID作为唯一性保障
    StringBuilder id = new StringBuilder();
    id.append(server.getIp())
        .append("$")
        .append(UUID.randomUUID().toString().replaceAll("-", "").toUpperCase());
    String zkServerPath = pathServer + "/" + id.toString() + "$";
    realPath =
        this.getZooKeeper()
            .create(zkServerPath, null, this.zkManager.getAcl(), CreateMode.PERSISTENT_SEQUENTIAL);
    server.setUuid(realPath.substring(realPath.lastIndexOf("/") + 1));

    Timestamp heartBeatTime = new Timestamp(getSystemTime());
    server.setHeartBeatTime(heartBeatTime);

    String valueString = this.gson.toJson(server);
    this.getZooKeeper().setData(realPath, valueString.getBytes(), -1);
    server.setRegisted(true);
  }
 public void startServer() {
   scheduleServer.startBooting();
   scheduleServer.readSystemConfigFile();
   scheduleServer.init();
   scheduleServer.initializeContext();
   scheduleServer.initializeListeners();
   scheduleServer.createSystemObject();
 }
 public void stopServer() {
   scheduleServer.realeaseProcesses();
   scheduleServer.destroy();
   scheduleServer.destroySystemObjects();
   scheduleServer.destroyListener();
   scheduleServer.destroyContext();
   scheduleServer.shutdown();
 }
  /**
   * x发送心跳信息
   *
   * @param server
   * @throws Exception
   */
  @Override
  public boolean refreshScheduleServer(ScheduleServer server) throws Exception {
    Timestamp heartBeatTime = new Timestamp(this.getSystemTime());
    String zkPath = this.pathServer + "/" + server.getUuid();
    if (this.getZooKeeper().exists(zkPath, false) == null) {
      // 数据可能被清除,先清除内存数据后,重新注册数据
      server.setRegisted(false);
      return false;
    }

    Timestamp oldHeartBeatTime = server.getHeartBeatTime();
    server.setHeartBeatTime(heartBeatTime);
    server.setVersion(server.getVersion() + 1);
    String valueString = this.gson.toJson(server);
    try {
      this.getZooKeeper().setData(zkPath, valueString.getBytes(), -1);
    } catch (Exception e) {
      // 恢复上次的心跳时间
      server.setHeartBeatTime(oldHeartBeatTime);
      server.setVersion(server.getVersion() - 1);
      throw e;
    }
    return true;
  }