JBoss 5 JMX依赖于HOW-TO

时间:2013-11-11 17:44:59

标签: java jboss jmx mbeans

我一直无法使用depends-list在运行时知道系统管理员为特定主题定义了多少MBean。

我对bean的定义:

<mbean code="MyBean" 
      name="x:service=MyBean" xmbean-dd="">
    <xmbean>
    <class>x.MyBean</class>

    <depends-list optional-attribute-name="DynamicListBeans">
        <depends-list-element>y:service=DynamicBean,name=A</depends-list-element>
        <depends-list-element>y:service=DynamicBean,name=B</depends-list-element>
    </depends-list>
    <operation>
        <description>Refreshes dynamic beans that could be edited by the end user.
        </description>
        <name>refreshConfigurationFromJmxLists</name>
    </operation>
    </xmbean>
</mbean>

我的课程:

公共类MyBean         实现MyBeanMXBean {

private List<ObjectName> dynamicListBeans;

@Override
public List<ObjectName> getDynamicListBeans() {
    return dynamicListBeans;
}

@Override
public void setDynamicListBeans(List<ObjectName> dynamicListBeans) {
    this.dynamicListBeans = dynamicListBeans;
}

public void refreshConfigurationFromJmxLists() {
    System.out.println(dynamicListBeans.size());
}

}

MyBeanMXBean正在为dynamicListBeans定义getter和setter,以及操作refreshConfigurationFromJmxLists。

在执行期间,refreshConfigurationFromJmxLists对列表的大小为零,因此JBoss没有设置名称 name = A name = B

有人知道我有什么误解或遗失吗?

帮助或线索将受到高度赞赏,亲切的问候。

1 个答案:

答案 0 :(得分:0)

目前的解决方法是使用命名模式和查询,如下所示:

"y:service=DynamicBean,name=*"

代码示例:

ObjectName objectName;
try {
    objectName = new ObjectName("y:service=DynamicBean,name=*");
} catch (MalformedObjectNameException e) {
    throw new IllegalArgumentException(e);
} catch (NullPointerException e) {
    throw new IllegalArgumentException(e);
}

Set<ObjectName> names = jmxProvider.queryNames(objectName,null);

虽然我不清楚使用依赖列表,但问题仍然存在。