通过JConsole实现多对象监视器

时间:2013-03-26 11:07:22

标签: jmx jconsole

我试图通过JConsole中的JMX监视我的应用程序的对象。但是在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的信息。请帮忙。

1 个答案:

答案 0 :(得分: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