0

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。助けてください。

4

1 に答える 1

0

私は に変わりtype=ますname=ObjectNamejavadocsを見ると、すべてのサンプルにname=は、jconsole が Bean を表示するために使用しているものと思われるものがあります。基本的に null 名を持つ 2 つの Bean があり、それらが互いに上書きしている可能性があります。オブジェクトのクラスを名前として使用している可能性があります。

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

Jconsole でプルアップして Bean 名をクリックすると、ObjectName使用されている が表示されます。そこに推測された名前が表示される場合があります。

余談ですが、私のSimpleJMX パッケージは、ObjectName の問題作成を強制します。

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

これにより、次が作成されますObjectNamej256:name=LookupCache

于 2013-03-26T12:26:43.023 に答える