今天要做一个tomcat监视,参考了ens和华中电力的相关代码,发现他们的做法都是先取到html代码,然后从这html代码中提取自己想要的数据,这太麻烦了,我在想有没有更好的办法。
        研究了tomcat的源码后,终于有了发现。我要的数据可以通过以下代码得到:
       --------server information------------------ 
       服务器信息:ServerInfo.getServerInfo()
        jvm版本:System.getProperty("java.runtime.version")
        jvm vendor:System.getProperty("java.vm.vendor")
        操作系统:System.getProperty("os.name")
        操作系统版本:System.getProperty("os.version")
       --------jvm information------------------
       free_memory:Runtime.getRuntime().freeMemory()
       total_memory:Runtime.getRuntime().totalMemory()
       max_memory:Runtime.getRuntime().maxMemory()
       ---------应用列表-------------------
      private Element createApplications()
 {
  Element applications = null;
  try
  {
   applications = new Element("applications");
   
   MBeanServer mBeanServer = Registry.getServer();
         ObjectName queryHosts = new ObjectName("*:j2eeType=WebModule,*");
         Set hostsON = mBeanServer.queryNames(queryHosts, null);
		   Iterator iterator = hostsON.iterator();
   while(iterator.hasNext())
   {
    ObjectName contextON = (ObjectName)iterator.next();
          String webModuleName = contextON.getKeyProperty("name");                      
    String hostName = null;
          String contextName = null;
          if(webModuleName.startsWith("//"))
               webModuleName = webModuleName.substring(2);
          
          int slash = webModuleName.indexOf("/");
          if(slash != -1)
          {
              hostName = webModuleName.substring(0, slash);
              contextName = webModuleName.substring(slash);
          } 
    else continue;
 
          if("/".equals(contextName)) continue;
          
          Element oneApp = new Element("application_information");
          try
          {        
              ObjectName queryManager = new ObjectName(contextON.getDomain() + ":type=Manager,path=" + contextName + ",host=" + hostName + ",*");
              Set managersON = mBeanServer.queryNames(queryManager, null);
              ObjectName managerON = null;
              for(Iterator iterator2 = managersON.iterator(); iterator2.hasNext();)
                 managerON = (ObjectName)iterator2.next();
 
              Element wmn = new Element("web_module_name");
              wmn.setText(contextName.substring(1));
          
              Element as = new Element("active_sessions");
           as.setText(mBeanServer.getAttribute(managerON, "activeSessions").toString());
          
           Element sc = new Element("session_count");
           sc.setText(mBeanServer.getAttribute(managerON, "sessionCounter").toString());
          
           Element mas = new Element("max_active_sessions");
           mas.setText(mBeanServer.getAttribute(managerON, "maxActive").toString()); 
           oneApp.addContent(wmn);
           oneApp.addContent(as);
           oneApp.addContent(sc);
           oneApp.addContent(mas);
           applications.addContent(oneApp);
          }
          catch(Exception e)
          {
           System.out.println("Error in TomcatMonitor.createApplications()-2");
          }//end_try
   }//end_while
  }
        catch(Exception e)
        {
         System.out.println("Error in TomcatMonitor.createApplications()-1");
        }//end_try
        return applications;
 }