⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 raconfig.java

📁 一个类似于openJMS分布在ObjectWeb之下的JMS消息中间件。
💻 JAVA
📖 第 1 页 / 共 3 页
字号:

  private void updateJoramAdminCfg(String hostName,
                                   String port)
    throws Exception {
    File file = new File(confDir, JORAMADMIN_CFG);
    FileReader fileReader = new FileReader(file);
    BufferedReader reader = new BufferedReader(fileReader);
    boolean end = false;
    String line;
    StringTokenizer tokenizer;
    String firstToken;
    StringBuffer buff = new StringBuffer();

    while (! end) {
      line = reader.readLine();
      if (line == null)
        end = true;
      else {
        tokenizer = new StringTokenizer(line);
        if (tokenizer.hasMoreTokens()) {
          firstToken = tokenizer.nextToken();
          if (firstToken.equalsIgnoreCase("Host")) {
            buff.append("Host   " + hostName + "\n");
            continue;
          }
          else if (firstToken.equalsIgnoreCase("Port")) {
            buff.append("Port   " + port + "\n");
            continue;
          }
        }
        buff.append(line + "\n");
      }
    }
    file.delete();
    ByteArrayInputStream bis = new ByteArrayInputStream(buff.toString().getBytes());
    FileOutputStream fos = new FileOutputStream(file);
    try {
      dump(bis,fos);
    } finally {
      fos.close();
      bis.close();
    }
  }

  private void updateJoramAdminXml(String hostName,
                                   String port)
    throws Exception {
    File file = new File(confDir, JORAMADMIN_XML);
    FileReader fileReader = new FileReader(file);
    BufferedReader reader = new BufferedReader(fileReader);
    boolean end = false;
    String line;
    StringTokenizer tokenizer;
    String firstToken;
    StringBuffer buff = new StringBuffer();
    int i = -1;

    while (! end) {
      line = reader.readLine();
      if (line == null)
        end = true;
      else {
        if (line.trim().startsWith("<connect")) {
          while (true) {
            i = line.indexOf("host");
            if (i > 0) {
              buff.append(line.substring(0,i+10));
              buff.append(hostName);
              int j = line.indexOf("\"",i+11);
              buff.append(line.substring(j,line.length()) + "\n");
              if (line.trim().endsWith("/>")) {
                line = reader.readLine();
                break;
              }
              line = reader.readLine();
              continue;
            }
            i = line.indexOf("port");
            if (i > 0) {
              buff.append(line.substring(0,i+6));
              buff.append(port);
              int j = line.indexOf("\"",i+7);
              buff.append(line.substring(j,line.length()) + "\n");
              if (line.trim().endsWith("/>")) {
                line = reader.readLine();
                break;
              }
              line = reader.readLine();
              continue;
            }
            buff.append(line + "\n");
            if (line.trim().endsWith("/>")) {
              line = reader.readLine();
              break;
            }
            line = reader.readLine();
          }
        } else if (line.trim().startsWith("<tcp")) {
          while (true) {
            i = line.indexOf("host");
            if (i > 0) {
              buff.append(line.substring(0,i+6));
              buff.append(hostName);
              int j = line.indexOf("\"",i+7);
              buff.append(line.substring(j,line.length()) + "\n");
              if (line.trim().endsWith("/>")) {
                line = reader.readLine();
                break;
              }
              line = reader.readLine();
              continue;
            }
            i = line.indexOf("port");
            if (i > 0) {
              buff.append(line.substring(0,i+6));
              buff.append(port);
              int j = line.indexOf("\"",i+7);
              buff.append(line.substring(j,line.length()) + "\n");
              if (line.trim().endsWith("/>")) {
                line = reader.readLine();
                break;
              }
              line = reader.readLine();
              continue;
            }
            buff.append(line + "\n");
            if (line.trim().endsWith("/>"))
              break;
            line = reader.readLine();
          }
        }
        buff.append(line + "\n");
      }
    }
    file.delete();
    ByteArrayInputStream bis = new ByteArrayInputStream(buff.toString().getBytes());
    FileOutputStream fos = new FileOutputStream(file);
    try {
      dump(bis,fos);
    } finally {
      fos.close();
      bis.close();
    }
  }

  /**
   * update RA_XML file
   * @param raProperties   ra.properties file
   */
  private void updateRAR(String raProperties) throws Exception {
    if (debug)
      System.out.println("RAConfig.updateRAR(" + raProperties + ")");

    FileReader file = new FileReader(raProperties);
    LineNumberReader lnr = new LineNumberReader(file);

    // get RAR name
    String line = lnr.readLine();
    while (line != null) {
      if (line.startsWith("RAR_NAME"))
        break;
      line = lnr.readLine();
    }
    int i = line.indexOf("RAR_NAME");
    String rarName = line.substring(i+"RAR_NAME".length()).trim();
    if (debug)
      System.out.println("RAConfig.updateRAR : rarName = " + rarName);
    else if (verbose)
      System.out.println("update rar \"" + rarName +
                         "\" with \"" + raProperties + "\"");

    // create Map of properties
    Map map = new Hashtable();
    Hashtable prop = null;
    String nodeName = null;
    line = lnr.readLine();
    while (line != null) {
      if (line.startsWith("[")) {
        prop = new Hashtable();
        nodeName = line.substring(line.indexOf("[")+1,line.indexOf("]"));
        map.put(nodeName.trim(),prop);
      } else {
        StringTokenizer st = new StringTokenizer(line);
        if (st.countTokens() == 2 && prop != null) {
          prop.put(st.nextToken(),st.nextToken());
        }
      }
      line = lnr.readLine();
    }
    file.close();

    if (debug)
      System.out.println("RAConfig.updateRAR : map = " + map);

    // create ra.xml file with new values
    File rarFile = new File(rarName);
    if (rarFile.exists()) {
      ZipFile zipFile = new ZipFile(rarFile.getAbsolutePath());
      for (Enumeration zippedFiles = zipFile.entries(); zippedFiles.hasMoreElements(); ) {
        // Retrieve entry of existing files
        ZipEntry currEntry = (ZipEntry) zippedFiles.nextElement();
        if (debug)
          System.out.println("RAConfig.updateRAR : currEntry = " + currEntry);
        if (currEntry.getName().equalsIgnoreCase(RA_XML)) {
          InputStream reader = zipFile.getInputStream(currEntry);
          createFile("ra.xml",update(reader,map));
          reader.close();
          break;
        }
      }
      zipFile.close();
    }

    // update rar
    updateZIP(rarName,RA_XML, tmpDir + "ra.xml",RA_XML);

    // update a3servers.xml (host and port).
    prop = (Hashtable) map.get("org.objectweb.joram.client.connector.JoramAdapter");
    if (prop != null) {
      if (debug)
        System.out.println("RAConfig.updateRAR : prop = " + prop);
      String host = (String) prop.get("HostName");
      short serverId = -1;
      String sid = (String) prop.get("ServerId");
      if (sid != null)
        serverId = new Short(sid).shortValue();
      else {
        if (debug)
          System.out.println("RAConfig.updateRAR : ServerId not found in ra.properties");
      }
      String port = (String) prop.get("ServerPort");
      if (host != null && host.length() > 0
          && port != null && port.length() > 0
          && serverId >= 0) {
        updateA3Servers(rarName,host,port,serverId);
      }
    }
    new File(tmpDir + "ra.xml").delete();
  }

  /**
   * Update the RAR file
   * @param zipName     String JAR or RAR file
   * @param path        path in JAR or RAR file
   * @param newFileName add new filename
   * @param oldFileName remove old file from JAR or RAR
   */
  private void updateZIP(String zipName,
                         String path,
                         String newFileName,
                         String oldFileName)
    throws Exception {

    if (debug)
      System.out.println("RAConfig.updateZIP(" + zipName +
                         "," + path + "," + newFileName +
                         "," + oldFileName + ")");
    else if (verbose)
      System.out.println("updateZIP \"" + zipName +
                         "\", path \"" + path +
                         "\", new file \"" + newFileName +
                         "\", old file \"" + oldFileName + "\"");


    ZipEntry entry = null;

    File file = new File(zipName);
    if (file.exists()) {
      ZipFile zipFile = new ZipFile(file.getAbsolutePath());
      Enumeration zipEntries = zipFile.entries();
      // create your output zip file
      ZipOutputStream newZip = new ZipOutputStream(
        new FileOutputStream(new File(file.getAbsolutePath() + "_TMP")));

      // Get all data (except the oldFileName) from zip file and
      // write it to the tmp zip file
      while (zipEntries.hasMoreElements()) {
        entry = (ZipEntry) zipEntries.nextElement();
        if (entry.getName().equalsIgnoreCase(oldFileName))
          continue;
        newZip.putNextEntry(new ZipEntry(entry.getName()));
        InputStream is = zipFile.getInputStream(entry);
        try {
          dump(is,newZip);
        } finally {
          newZip.closeEntry();
          is.close();
        }
      }
      zipFile.close();

      // Write the new fileName to the zip
      entry = new ZipEntry(path);
      newZip.putNextEntry(entry);
      try {
        FileInputStream fis = new FileInputStream(newFileName);
        dump(fis,newZip);
        fis.close();
      } catch (Exception exc) {
        System.out.println("Error reading input file: " + newFileName + " " + exc);
        newZip.close();
        new File(file.getAbsolutePath() + "_TMP").delete();
        throw exc;
      } finally {
        newZip.flush();
        newZip.closeEntry();
        newZip.finish();
        newZip.close();
      }
      String toRename = file.getAbsolutePath() + "_TMP";
      new File(file.getAbsolutePath()).delete();
      new File(toRename).renameTo(file);
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -