我想在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";
}
}
在这样的例子中应该做些什么来添加描述?
由于
答案 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 !!