基本上我正在尝试在此处修改本教程中的代码:http: //docs.oracle.com/javase/tutorial/jmx/remote/custom.html ,以便我可以从此处描述的tomcat访问MBean:http ://wiki.apache.org/tomcat/FAQ/Monitoring
从代码中访问 JMX Bean java.lang:type=Memory 没有问题,因为它的接口是在 java.lang 中定义的。这是它的代码示例:
ObjectName mbeanName = new ObjectName("java.lang:type=Memory");
MemoryMXBean mxbeanProxy2 = JMX.newMXBeanProxy(mbsc, mbeanName, MemoryMXBean.class, true);
MemoryUsage memUsage = mxbeanProxy2.getHeapMemoryUsage();
echo("\nMemory Utilization: " + (memUsage.getUsed()/(double)memUsage.getMax()) * 100 + "%");
这里的mbsc 是MBeanServerConnection 的一个实例。问题是,当我尝试以类似的方式访问 tomcat 中的内置 MBean 时,我遇到了找不到为任何 tomcat MBean 定义的任何接口的问题。我可以从 JConsole 监视 MBean,但为此我需要能够从代码中执行此操作。我在某处发现它也可以通过以下方式完成:
ObjectName mbeanName2 = new ObjectName("Catalina:type=ThreadPool,name=\"http-apr-8080\"");
Object value = mbsc.getAttribute(mbeanName, "name");
但这给了我这个异常:线程“main”javax.management.AttributeNotFoundException中的异常:没有这样的属性:com.sun.jmx.mbeanserver的名称......
我觉得我错过了一些相当基本的东西。但是这方面的信息似乎非常有限,谷歌并没有太大帮助。