java - 从 ManagedResource bean 公开 Collection<Something>?

标签 java spring jmx mbeans spring-jmx

@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 中看起来像这样:

ThreadInfos exposed in JConsole

关于java - 从 ManagedResource bean 公开 Collection<Something>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13855981/

相关文章:

java - 将 JOptionPane 与 Xtend 结合使用

java - Junit 测试在我的异步线程上挂起

spring - thymeleaf spring boot templates 子文件夹中的 View

java - Mbean 中的某些方法在 Jconsole 中不显示?

java - 从 VisualVM 通过 JMX 远程连接到 JBoss AS 时如何避免此 NullPointerException?

java - Swing的KeyListener和多个按键同时按下

java - Getter正确返回,然后变为null

java - Android使用服务将通知设置为特定时间

java - 没有重定向的 Spring Security

java - Weblogic MBean 服务器仅在 15 秒后提供该值