clusterutils.java

来自「weblogic应用全实例」· Java 代码 · 共 148 行

JAVA
148
字号
//定义在包examples.cluster.utils
package examples.cluster.utils;
//引入的类
import java.util.*;
import java.text.NumberFormat;

/**
 * 工具类,记录簇的动作 。
 * 消息的格式[message : weblogic.system.name].
 * 如:addClusterMessage("Hello : cluster1");
 */

public class ClusterUtils {
  
  /* 簇成员的哈希表 */
  private Hashtable clusterMembers;

  /* 保存异常 */
  private int numExceptions = 0;

  /* 结果向量 */
  private Vector results = new Vector();

  /** 
   * 消息标记
   */
  private String token = ":";

  /**
   * 构造方法
   */    
  public ClusterUtils(){
    clusterMembers = new Hashtable();
  }

  /**
   * 构造方法
   * @参数 iterations        int 迭代个数
   */    
  public ClusterUtils(int iterations){
    clusterMembers = new Hashtable();
  }

  /**
   * 缺省的格式[message : weblogic.system.name].
   * 如:addClusterMessage("Hello : cluster1");
   * @参数 message           string 消息
   */
  public void addClusterMessage(String message){
    results.addElement(message);
  }
  
  /**
   * 允许重设标记,取代 ":"。
   * @参数 token             String 分割消息的新标记
   */
  public void setToken(String token){
    this.token = token;
  }
  
  public int getIterations(){
    return results.size();
  }

  public int getExceptionCount(){
    return numExceptions;
  }

  public void incrementExceptionCount(){
    numExceptions++;
  }
  
  /**
   * 统计报告
   */
  public String processStatistics(){
    int invocations = 0;
    for(int i=0; i < results.size(); i++){
      if (results.elementAt(i) != null) {
        invocations++;
        StringTokenizer tokens = new StringTokenizer((String)results.elementAt(i), token);
        tokens.nextToken();
        String clusterName = tokens.nextToken();
        clusterName = clusterName.trim();
        Cluster cluster = null;
        if(!knownCluster(clusterName)){
          cluster = new Cluster(clusterName);
        }else{
          cluster = (Cluster)clusterMembers.get(clusterName);
        }
        cluster.increment();
        clusterMembers.put(clusterName, cluster);
      }
    }
    StringBuffer stats = new StringBuffer("");
    if (clusterMembers.isEmpty() | invocations == 0) {
      stats.append("No statistics are available.\n");
    } else {
      Enumeration enum = clusterMembers.keys();
      while(enum.hasMoreElements()){
        String key = (String)enum.nextElement();
        Cluster cluster = (Cluster)clusterMembers.get(key);
        stats.append("\"" + key + "\" processed " + cluster.getIncInt()  
          + " (" + getPercent(cluster.getIncInt(),invocations) + ") of "
          + invocations + " invocations\n");
      }
    }
    return stats.toString();
  }
  
  private boolean knownCluster(String clusterName){
    if(clusterMembers.containsKey(clusterName))
      return true;
    return false;
  }

  private String getPercent (int top, int bottom){
    NumberFormat nf = NumberFormat.getPercentInstance();
    return nf.format(new Float( (float)top / (float)bottom) );
  }

/**
 * 内部类
 */
  class Cluster{
    String name  = null;
    int messages = 0;

    Cluster(String clusterName){
      name = clusterName;
    }

    public void increment(){
      messages++;
    }

    public String getName(){
      return name;
    }

    public int getIncInt(){
      return messages;
    }
  }
}


⌨️ 快捷键说明

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