2013-03-26 5 views
0

JConsole에서 JMX를 통해 내 애플리케이션의 객체를 모니터하려고합니다. 하지만 JConsole에서는 동일한 클래스의 여러 객체를 볼 수 없습니다. 난 단지 ApplicationCacheMBean1의 정보를 볼 수 있어요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에서 : 다음은 내 코드입니다. ApplicationCacheMBean2에 대한 정보가 없습니다. 도와주세요.

+0

당신이 확실 "() immitateActivity"

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

이는 ObjectName을 만들어? 응용 프로그램이 거기서 멈추지 않고 단순히 두 번째 MBean 등록으로 진행되지 않는다는 것입니까? BTW를 사용하면 ManagementFactory.getPlatformMBeanServer()를 통해 MBeanServer를 다시 검색 할 필요가 없습니다. 플랫폼 MBean 서버는 사실상 싱글 톤이며 시간이 지나도 변하지 않습니다. –

답변

0

type=name=으로 변경합니다. ObjectName javadocs을 보면, 모든 샘플은 name=입니다. jconsole이 콩을 표시하는 데 사용하는 것입니다. 기본적으로 널 (null) 이름을 갖는 두 개의 빈을 가지고 있으며 서로 겹쳐 쓰고있을 수 있습니다. 개체의 클래스를 이름으로 사용 중일 수 있습니다.

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

당신이 JConsole의 그것을 끌어와 빈의 이름을 클릭하면, 그것이 사용하고있는 ObjectName을 표시해야합니다. 거기에 유추 된 이름이 표시 될 수 있습니다. 여담으로

, ObjectName를 내 SimpleJMX package 힘 문제 작성 : 방법은 비동기 j256:name=LookupCache