所以基本上我試圖修改從本教程這裏的代碼:http://docs.oracle.com/javase/tutorial/jmx/remote/custom.html ,這樣我可以從Tomcat訪問的MBean此處所描述:http://wiki.apache.org/tomcat/FAQ/Monitoring訪問內置的MBean在Tomcat中編程
沒有訪問JMX Bean的問題java.lang:type =內存代碼,因爲它的接口是在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中的內置MBeans時,遇到了無法找到爲任何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 ......
我覺得我錯過了一些相當基本的東西。但有關這方面的信息似乎非常有限,谷歌沒有多大幫助。
所以只修復這個錯字它應該工作?一旦我可以驗證這一點,我會接受你的答案... – Oz0234