当objectname使用通配符时,无法访问mbean

时间:2012-11-16 19:27:17

标签: java regex jmx objectname

我在使用ObjectName表达式匹配访问mbean时遇到问题。以下代码成功设置了boolean b:

ObjectName objName =
    new ObjectName("UnifiedSystem-search Cluster Control l-c:class=myclass");
boolean b = (boolean)myMBeanServer.invoke(objName, "areAlertsSuppressed");

问题是mbeanname根据编码环境而变化。但是,名称只会略有变化,可以通过匹配ObjectNames支持的内置表达式轻松处理。以下代码(在与上面相同的环境中)抛出InstanceNotFoundException:

ObjectName objName =
    new ObjectName("UnifiedSystem-search Cluster Control *:class=myclass");
boolean b = (boolean)myMBeanServer.invoke(objName, "areAlertsSuppressed")

我有什么想法可以得到我正在寻找的结果?

1 个答案:

答案 0 :(得分:15)

  

当objectname使用通配符

时,无法访问mbean

据我所知,ObjectName不使用invoke方法处理任何通配符模式。您将不得不使用myMBeanServer.queryNames(...)方法来查找与您的模式匹配的bean。然后,您可以使用特定名称致电invoke

Set<ObjectName> nameSet = myMBeanServer.queryNames(new ObjectName(
       "UnifiedSystem-search Cluster Control *:class=myclass"), null);
// then use the first name from the set
// some error checking is needed here to make sure there is a name in the set
myMBeanServer.invoke(nameSet.iterator().next(), "areAlertsSuppressed")