关于JMX,我还是建议你去看JDK文档,我这里只是稍微的说说。在JMX里面,
1,所有的MBean(你把他理解为一个JAVA对象得了)都会被用一个javax.management.ObjectName对象与之相关联。
2,我们可以通过javax.management.MBeanServerConnection取得一个连接,这个连接就是我们访问JAVA对象的代理
3,通过2的连接可以调用注册在MBeanServer上的MBean的方法,以及属性取得。你所需要做的事情有下面几件:
1,需要把你的Tomcat配置为支持JMX
2,需要获得与Tomcat的javax.management.MBeanServerConnection
3,需要知道“本人的目的,只是要知道tomcat的线程数是不是达到峰值”这件事情是有哪个MBean来提供(也就是找准ObjectName)
4, 需要知道“tomcat的线程数”在你找到的MBean中的属性名首先我说明以下我做以上事情的环境是TOMCAT6.0
下面对以上四件事情分别对应的做法:
1,打开Tomcat 6.0\bin\tomcat6w,然后在“Java”的“Java Options”下面追加
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8050
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
语句,特别说明以下port不要用已经用过的端口就OK。2,3,4见以下代码:
package com.test.thread;import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;public class ThreadThreshold {
// mbean server connection
private static MBeanServerConnection mbsc = null; /**
 * @param args
 */
public static void main(String[] args) {
try {
String jmxURL = "service:jmx:rmi:///jndi/rmi://localhost:8050/jmxrmi";//tomcat jmx url
JMXServiceURL serviceURL = new JMXServiceURL(jmxURL);
JMXConnector connector = JMXConnectorFactory.connect(serviceURL,
null); mbsc = connector.getMBeanServerConnection();
ObjectName threadObjName = new ObjectName(
"Catalina:type=ThreadPool,name=http-8080");//这里说明一下,端口最好是动态取得

MBeanInfo mbInfo = mbsc.getMBeanInfo(threadObjName);
String attrName = "currentThreadCount";//tomcat的线程数对应的属性值

MBeanAttributeInfo[] mbAttributes = mbInfo.getAttributes();
System.out.println("currentThreadCount:"+mbsc.getAttribute(threadObjName, attrName));
} catch (Exception e) {
e.printStackTrace();
}
}}这个代码不许要设置CLASSPATH了,有JDK就行(当然应该是1.5版本的哈)。以上代码是能达到你的需求的,当然还有待你的改进,有问题继续联络。

解决方案 »

  1.   

    简单点的实现,参考了http://oss.wxnet.org/mbeans.html-----------------
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <% %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@page import="javax.management.MBeanServerFactory"%><%@page import="javax.management.MBeanServer"%>
    <%@page import="org.apache.catalina.Connector"%>
    <%@page import="javax.management.ObjectName"%>
    <%@page import="com.nantian.jmx.mbean.Server"%><%@page import="org.apache.commons.modeler.Registry"%>
    <%@page import="java.util.Set"%>
    <%@page import="javax.management.MBeanInfo"%>
    <%@page import="javax.management.MBeanAttributeInfo"%>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body><%

    MBeanServer mBeanServer = null;
    mBeanServer = Registry.getRegistry(null, null).getMBeanServer();
    for(int j=0;j<mBeanServer.getDomains().length;j++){
    System.out.println("###########"+mBeanServer.getDomains()[j]);
    }
    System.out.println("###########"+mBeanServer.getDefaultDomain());
    //Set names = null;
        try {
         ObjectName obn=new ObjectName("ams:type=Connector,port=8880");
          MBeanInfo minfo=mBeanServer.getMBeanInfo(obn);
          MBeanAttributeInfo attrs[]=minfo.getAttributes();
          Object value=null;
          for( int i=0; i< attrs.length; i++ ) {
           if( ! attrs[i].isReadable() ) continue;
              String attName=attrs[i].getName();
              if( attName.indexOf( "=") >=0 ||
                      attName.indexOf( ":") >=0 ||
                      attName.indexOf( " ") >=0 ) {
                  continue;
              }
              try {
                  value=mBeanServer.getAttribute(obn, attName);
              } catch( Throwable t) {
                  log("Error getting attribute " + obn +
                      " " + attName + " " + t.toString());
                  continue;
              }
              if( value==null ) continue;
              if( "modelerType".equals( attName)) continue;
              String valueString=value.toString();
              System.out.println("^^^^^^^#######attName:"+attName);
              System.out.println("^^^^^^^#######valueString:"+valueString);
          }
        } catch (Exception e) {
            e.printStackTrace();
            
        }
    %>
    </body>
    </html>