JMX MBeanInfo和Descriptors

时间:2013-11-18 14:24:37

标签: java jmx mbeans

我正在努力了解如何利用/使用MBeanInfo(和相关MBeanAttributeInfoModelMBeanInfo等)并与之相关Descriptors

据我所知,MBean*Info就像一个Class对象,包含有关可用方法/属性/构造函数等的信息。另外,据我所知,这些信息是不可变的,并为我们在MBeanServer.registerMBean或使用StandardMBean类(可能MBeanServer实际使用StandardMbean类?)的过程中使用反射生成此信息。这或多或少是正确的吗?

另外,我猜有一个ModelMBean概念,我们可以通过编程方式传递我们自己的MBeanInfo。如果通过带有反射的StandardMbean可以实现同样的目的,那么这样做有什么意义呢?

最后,Descriptors被允许用户通过以描述符的形式提供(名称,值)对来扩展mbeans的信息。这可以附加到任何MBean*Info类(构造函数,属性,操作等)。但是,它可以在构造Info对象期间附加,因为它是不可变的。因此,使用StandardMbean,它自己生成此信息,没有办法注入额外的信息,因为我们从MBeanInfo得到的描述符也是不可变的...我在这里遗漏了什么?在MBean上向构造函数/字段/方法的描述符添加额外信息的简单方法是什么?

1 个答案:

答案 0 :(得分:1)

  

...此信息是不可变的,并在MBeanServer.registerMBean的过程中为我们生成,或者使用StandardMBean类...使用反射来生成此信息。这或多或少是正确的吗?

是。该信息是关于bean构建的,然后在服务器上注册,可以发布给客户端。不确定MBeanServer是否会在封面下创建StandardMBean

  

如果可以通过带反射的StandardMbean实现同样的目的,那么这样做有什么意义呢?

MBean*Info类允许您以编程方式将JMX映射发布到具体类型,而无需接口/ impl。这允许诸如Spring之类的外部包能够检测和发布调用已发现具有特殊@ManagedResource属性的bean的JMX bean。

这也是我的SimpleJMX package能够使用其注释发布bean的方式。您需要做的就是将以下内容添加到您的某个类中,SimpleJMX以编程方式创建描述该类的MbeanInfo个实例。您不需要自己定义JMX接口/ impl。

@JmxResource(description = "Lookup cache", domainName = "j256")
public class LookupCache {

    @JmxAttributeField(description = "Number of hits in the cache")
    private int hitCount;
    ...

在内部,SimpleJMX创建了一个实现javax.management.DynamicMBean的类的实例。该接口公开了get,set,invoke动作方法。它还返回描述JMX发布类的MBeanInfo

  

我在这里遗漏了什么吗?在MBean上向构造函数/字段/方法的描述符添加额外信息的简单方法是什么?

我不会将DescriptorsSimpleJMX一起使用,因此我不知道它们是如何使用的。它们看起来是关于方法或参数的元信息,例如deprecateddefaultValue等。这似乎是静态信息,因此也是不可变的。