如何将JMX MBean指定为树形结构在JConsole中显示?

5

我的应用程序有一组特定的键,我会监测这些键对应的值(最小值、最大值等)。它看起来非常类似于以下内容:

 public class Data implements Serializable{
    int max, min; //etc..
 }

 public interface HelloMBean{
     String [] getKeys();
     Data getDataForKey(String);
     Data [] getDatas();
 }

然而,我无法使用jconsole看到键(Keys)或数据(Datas)属性(我总是看到这些属性的“不可用”值)。

我应该如何构建我的bean定义,以便它显示为值树?

HelloMBean
|- attributes
     |---- key1
     |---- key2

我希望能够将数值(例如:key1.max或key2.min)以图形方式显示出来。这个有可能吗?如果可以,最好的实现方式是什么?
谢谢!
1个回答

3
你需要的是 javax.management.openmbean.CompositeData 吗?
因为 jconsole 不具备 Data 类的功能,它对该类一无所知,因此它被视为“不可用”。
或者,如果你想将每个“key”创建为单独的属性,可以编写自己的 DynamicMBean 实现,返回带有原始类型(如 int)的简单结构。例如,这里有一个示例

有什么线索可以告诉我如何在Spring中使用CompositeData类? - Yaneeve
据我所知,如果您正确创建MXBean(不支持Map),则会自动支持CompositeData。 http://docs.oracle.com/javase/tutorial/jmx/mbeans/mxbeans.html文档有非常相似的示例。 代码非常简单,不需要Spring。 如果您希望将映射公开为属性列表,则必须实现DynamicMBean,Spring也不支持此功能。 - kan
我想使用Spring,因为它可以通过配置文件轻松地让我配置MBean名称等。我希望消费者代码根据他们的需求设置此文件。从您所写的内容中我了解到Spring不支持DynamicMBeans,但是它是否支持MXBeans呢? - Yaneeve
1
@Yaneeve 这段代码非常简单,你可以将mxbean的内容放在spring配置中。然而,MBean受类型限制:MXBean概念提供了一种简单的方法来编写仅引用预定义类型集的MBean - kan
@Yaneeve 在一般情况下... 并不是所有的东西都需要 Spring® Support™,任何合理设计的 Java 类都可以通过 Spring 进行配置。 - kan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接