【问题标题】:JMX MBeanInfo and DescriptorsJMX MBeanInfo 和描述符
【发布时间】:2013-11-18 14:24:37
【问题描述】:

我很难理解如何利用/使用MBeanInfo(以及相关的MBeanAttributeInfoModelMBeanInfo 等)以及与之相关的Descriptors

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

另外,我想存在ModelMBean 的概念,我们可以通过编程方式将自己的MBeanInfo 传递给它。如果可以通过带有反射的StandardMbean 实现相同的目的,那么这样做有什么意义?

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

【问题讨论】:

    标签: java jmx mbeans


    【解决方案1】:

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

    是的。信息是关于 bean 构建的,然后在服务器上注册到它可以发布给客户端。不确定MBeanServer 是否在幕后创建了StandardMBean

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

    MBean*Info 类允许您以编程方式将 JMX 映射发布到具体类型不需要接口/实现。这使得 Spring 等外部包能够检测和发布 JMX bean,这些 bean 调用已发现的具有特殊 @ManagedResource 属性的 bean。

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

    @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 等。这似乎是静态信息,因此也是不可变的。

    【讨论】:

    • 啊,我明白了。因此,实际的 MBeanInfo 更多的是关于生成的类的“低级”信息(通常),使用基于接口或注释的反射,就像你的情况一样。而且,重要的是,。他们不需要将名称与实际字段进行一对一映射,对吗?我的意思是,我可以有一个字段x,但在 JMX 发布中,如果在 JMX/JVM 世界之间进行相应转换,我将其称为 y
    • 是的,没错@Bober02。您的字段可能是一回事,但 JMX getter 是另一回事。通常这是我不推荐的糟糕模式。更典型的是,我有一些内部类型 Foo,而 jconsole 不知道,所以我发布了一个 getFooString() 方法,该方法将其返回为 jconsole 可以显示的 String
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2017-11-30
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多