2013-03-26 53 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