【发布时间】:2013-07-01 17:08:04
【问题描述】:
基本上我正在尝试修改本教程中的代码: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");
但这给了我这个例外: 线程“主”javax.management.AttributeNotFoundException 中的异常:没有这样的属性:com.sun.jmx.mbeanserver 的名称......
我觉得我错过了一些相当基本的东西。但是这方面的信息似乎非常有限,谷歌并没有太大帮助。
【问题讨论】: