public static void Run(String[] args) throws Exception {

    try {
      NCache = ToolsRPCService.GetRPCService();

      Object param = new RemoveClientNodeParam();
      tangible.RefObject<Object> tempRef_param = new tangible.RefObject<Object>(param);
      CommandLineArgumentParser.CommandLineParser(tempRef_param, args);
      param = tempRef_param.argvalue;
      cParam = (RemoveClientNodeParam) param;
      if (cParam.getIsUsage()) {
        AssemblyUsage.PrintUsage();
        return;
      }

      if (!ValidateParameters()) {
        return;
      }

      if (cParam.getPort() != -1) {
        NCache.setPort(cParam.getPort());
      }

      if (cParam.getServer() != null && !cParam.getServer().equals("")) {
        NCache.setServerName(cParam.getServer());
      }

      cacheServer = NCache.GetCacheServer(new TimeSpan(0, 0, 30));

      if (cacheServer == null) {
        throw new Exception("TayzGrid service can not be contacted");
      }
      config = cacheServer.GetNewConfiguration(cParam.getCacheId());
      if (config == null) {
        System.err.println("Error : The cache doesnot exist");
        return;
      }
      if (config.getCacheSettings().getCacheType().equals("clustered-cache")) {
        for (Address node : config.getCacheDeployment().getServers().GetAllConfiguredNodes()) {
          currentServerNodes.add(node.getIpAddress().getHostName().toString());
        }
      } else {
        System.err.println("Error: Client nodes cannot be added to local caches");
        return;
      }

      if (UpdateConfigs()) {
        System.out.println("Info: Client node(s) successfully removed...");
      }
    } catch (Exception ex) {
      System.err.println("Error: " + ex.getMessage());
    } finally {
      if (cacheServer != null) {
        cacheServer.dispose();
      }
    }
  }
  private static boolean UpdateConfigs() throws UnknownHostException, Exception {
    try {
      boolean successfullremove = false;
      if (config.getCacheDeployment().getClientNodes() == null) {
        System.out.println("Error : Client node(s) not found.");
        return false;
      }

      if (config.getCacheDeployment().getClientNodes().getNodesList() == null) {
        System.out.println("Error : Client node(s) not found.");
        return false;
      }

      com.alachisoft.tayzgrid.config.newdom.ClientNode[] existingClientNodes =
          config.getCacheDeployment().getClientNodes().getNodes();
      for (com.alachisoft.tayzgrid.config.newdom.ClientNode cNode : existingClientNodes) {
        if (cParam.getClientNode().toString().equals(cNode.getName())) {
          config.getCacheDeployment().getClientNodes().getNodesList().remove(cNode);
          successfullremove = true;
        }
      }

      if (!successfullremove) {
        System.out.println("Error : Client node(s) not found.");
        return false;
      }

      byte[] userId = null;
      byte[] paswd = null;

      for (Iterator it = currentServerNodes.iterator(); it.hasNext(); ) {
        String node = (String) it.next();
        NCache.setServerName(node);
        cacheServer = NCache.GetCacheServer(new TimeSpan(0, 0, 30));
        cacheServer.RegisterCache(cParam.getCacheId(), config, "", true, userId, paswd, true);
      }

      NCache.setServerName(cParam.getClientNode());
      cacheServer = NCache.GetCacheServer(new TimeSpan(0, 0, 30));
      ClientConfiguration clientConfiguration =
          cacheServer.GetClientConfiguration(cParam.getCacheId());
      CacheConfiguration cacheConfiguration =
          clientConfiguration.getCacheConfigurationsMap().get(cParam.getCacheId());
      cacheServer.RemoveCacheFromClientConfig(cParam.getCacheId());

      return true;

    } catch (RuntimeException ex) {
      System.out.println("Error: " + ex.getMessage());
      return false;
    }
  }