对象名称使用通配符时无法访问 MBean



我在使用 ObjectName 表达式匹配访问 mbean 时遇到问题。以下代码成功设置布尔值 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")

任何想法如何获得我想要的结果?

当对象名使用通配符时无法访问 mbean

据我所知,ObjectName 不会使用 invoke 方法处理任何通配符模式。 您将不得不使用 myMBeanServer.queryNames(...) 方法来查找与您的模式匹配的豆子。 然后,您可以使用特定名称调用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")

相关内容

  • 没有找到相关文章

最新更新