@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 实例稍微简单一些的方法。假设您的类(class)是:
public class Something {
private String foo;
private Date date;
<Insert Ctor here>
public String getFoo() {
return foo;
}
public Date getDate() {
return date;
}
}
您可以按如下方式创建 MBean 接口(interface):
public interface SomethingMBean { // same package please...
public String getFoo();
public Date getDate();
}
使某物实现 SomethingMBean:
public class Something implements SomethingMBean {
.....
}
现在,在您实际的 MBean(@MXBean 带注释的 MBean)中,您可以定义如下方法:
public List<SomethingMBean> getSomethings() {
.....
}
Java6+ MBeanServer 将在运行时自动生成 CompositeDataTypes 和实例。作为一个简单的诊断工具,我经常更换 JVM 的 ThreadMXBean用一个包裹好的暴露 ThreadInfo正在使用这种技术。 (参见 ExtendedThreadManager 作为示例)它在 JConsole 中看起来像这样:
关于java - 从 ManagedResource bean 公开 Collection<Something>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13855981/