@ManagedResource
@Component
public class MyBean {
Map<String, Something> map = new HashMap<String, Something>();
@ManagedAttribute
public Collection<Something> getFoo() {
return map.values();
}
}
foo属性在visualvm mbeans选项卡中显示为“不可用”。为什么?
最佳答案
MXBean解决方案在大多数情况下都是可行的方法,尽管比生成CompositeDataSupport实例要容易一些。假设您的课程是:
public class Something {
private String foo;
private Date date;
<Insert Ctor here>
public String getFoo() {
return foo;
}
public Date getDate() {
return date;
}
}
您可以创建一个MBean接口,如下所示:
public interface SomethingMBean { // same package please...
public String getFoo();
public Date getDate();
}
使Something实现SomethingMBean:
public class Something implements SomethingMBean {
.....
}
现在,在您的实际MBean(带有@MXBean注释的MBean)中,您可以定义如下方法:
public List<SomethingMBean> getSomethings() {
.....
}
Java6 + MBeanServer将在运行时自动生成CompositeDataTypes和实例。作为一种简单的诊断工具,我经常将JVM的ThreadMXBean换成一个包装好的JVM,以使用此技术公开ThreadInfo。 (有关示例,请参见ExtendedThreadManager)在JConsole中如下所示: