2013-03-26 85 views
0

我想通過JConsole中的JMX監視我的應用程序的對象。但在JConsole中,我無法看到同一個類的多個對象。 這裏是我的代碼:通過JConsole的多對象監視器

ApplicationCache cache1 = new ApplicationCache(); 
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); 
ObjectName name = new ObjectName("org.javalobby.tnt.jmx:type=ApplicationCacheMBean1"); 
mbs.registerMBean(cache1, name); 
imitateActivity(cache1); 

ApplicationCache cache2 = new ApplicationCache(); 
mbs = ManagementFactory.getPlatformMBeanServer(); 
ObjectName name2 = new ObjectName("org.javalobby.tnt.jmx:type=ApplicationCacheMBean2"); 
mbs.registerMBean(cache2, name2); 
imitateActivity(cache2); 

在JConsole UI,我能夠看到的只有ApplicationCacheMBean1的信息。沒有關於ApplicationCacheMBean2的信息。請幫忙。

+0

確定 「immitateActivity()」 方法是異步的?您的應用程序不會停留在那裏,並且不會繼續進行第二個MBean的註冊? 順便說一下,您不需要通過ManagementFactory.getPlatformMBeanServer()重新檢索MBeanServer。平臺MBean服務器實際上是一個單例,並且不會及時更改。 – 2013-04-04 13:11:45

回答

0

我會將type=更改爲name=。如果你看看ObjectName javadocs,他們所有的樣本都有name=,我相信這是jconsole用來顯示bean的東西。這可能是因爲你有兩個基本上沒有名字的bean,它們相互覆蓋。它可能使用對象的類作爲名稱。

new ObjectName("org.javalobby.tnt.jmx:name=ApplicationCacheMBean1"); 
new ObjectName("org.javalobby.tnt.jmx:name=ApplicationCacheMBean2"); 

如果你拉起來在JConsole並點擊bean的名字,它應該顯示ObjectName它正在使用。你可能會在那裏看到一個推斷的名字。

順便說一句,我SimpleJMX package力量創造問題的ObjectName的:

@JmxResource(domainName = "j256", beanName = "LookupCache") 
public class LookupCache { 

這將創建ObjectNamej256:name=LookupCache