标准MBean的描述

时间:2011-03-10 10:50:25

标签: java jboss jmx

我想在JBoss jmx-console中使我的标准MBean详细。 DynamicMBean有getMBeanInfo()来做。方法返回MBeanInfo,其中包含MBean的描述。但是我怎么能为Standard MBean做同样的事情呢?例如。我有以下MBean接口:

public interface MyMBean {
  String f();
}

......以下实施:

public class My implements MyMBean {
  public String f() {
    return "test";
  }
}

在这样的例子中应该做些什么来添加描述?

由于

3 个答案:

答案 0 :(得分:4)

对于StandardMBeans,无法添加说明或其他元信息。

来自MBeanInfo的JavaDoc:

  

未指定标准MBean的MBeanInfo的其余详细信息。这包括MBeanInfo和任何包含的构造函数,属性,操作和通知的描述;以及构造函数和操作的参数名称和描述。

因此,您至少需要使用DynamicMBeans(或ModelMBean或OpenMBean)来指定此信息。 Spring可以帮助你,因为它允许通过注释创建DynamicMBeans,最后使用它比编写自己的StandardMBeans更简单。示例(来自spring文档):

@ManagedResource(objectName="bean:name=testBean4",
                 description="My Managed Bean")
public class AnnotationTestBean {

    private int age;

    @ManagedAttribute(description="The Age Attribute", currencyTimeLimit=15)
    public int getAge() {
        return age;
    }
}

有关详细信息,请参阅this article

答案 1 :(得分:1)

您可以通过xmbean-descriptor执行此操作,而无需修改现有的mbean源代码。

请参阅How to add description for MBean method to see it in jmx-console of JBOSS以获得答案。

答案 2 :(得分:0)

从Spring annotations @ Managed *获取描述信息的方法只是声明一个标准的Spring“托管bean”,而不是MBean或MXBean。

为此,在您的示例中,您不能使用“MBean”后缀实现接口。 然后,当MBeanExporter将registerBeanInstance(..)时,bean将被检测为标准的“托管bean”,并将使用所有spring注释转换为ModelMBean,包括属性,操作,参数等的描述。

作为一项要求,您应该在春季上下文中声明 MBeanExporter AnnotationJmxAttributeSource MetadataNamingStrategy MetadataMBeanInfoAssembler 属性,可以这样简化:

<bean id="mbeanExporter"
     class="org.springframework.jmx.export.annotation.AnnotationMBeanExporter" />

<context:mbean-export />

你的托管bean应该是这样的(正如Roland所解释的那样):

@Component("myManagedBean")
@ManagedResource(objectName="your.domain.jmx:name=MyMBean",
                 description="My MBean goal")
public class AnnotationTestBean {

    private int age;

    @ManagedAttribute(description="The age attribute", currencyTimeLimit=15)
    public int getAge() {
        return age;
    }

    @ManagedOperation(description = "Check permissions for the given activity")
    @ManagedOperationParameters( {
        @ManagedOperationParameter(name = "activity",
                                   description = "The activity to check")
    })
    public boolean isAllowedTo(final String activity) {
        // impl
    }
}

请记住不要实现MBean接口,这将是StandardMBean !!