我正在使用 JMX 构建一个自定义工具,用于监控工作中的远程Coherence集群。我能够很好地连接并直接查询 MBean,并且我已经获得了几乎所有我需要的信息。但是,在尝试查询 MBean 以获取集群中的特定缓存时,我遇到了一个障碍,我可以在其中找到有关获取/放置总数、每个平均时间等的统计信息。
当我使用 JConsole 连接到远程进程时,我尝试以编程方式访问的 MBean 是可见的,并且具有如下名称:
Coherence:type=Cache,service=SequenceQueue,name=SEQ%GENERATOR,nodeId=1,tier=back
type=Cache
如果我可以在不指定所有缓存的情况下动态获取特定节点 ID 的所有 MBean,它会更加灵活。我正在尝试像这样查询它们:
QueryExp specifiedNodeId = Query.eq(Query.attr("nodeId"), Query.value(nodeId));
QueryExp typeIsCache = Query.eq(Query.attr("type"), Query.value("Cache"));
QueryExp cacheNodes = Query.and(specifiedNodeId, typeIsCache);
ObjectName coherence = new ObjectName("Coherence:*");
Set<ObjectName> cacheMBeans = mBeanServer.queryMBeans(coherence, cacheNodes);
但是,无论我使用queryMBeans()
or queryNames()
,查询都会返回一个 Set 包含...
- ...如果我传递上面显示的参数,则为0 个对象
- ...如果我传递第一个参数,则为0 个对象
null
- ...如果我传递第二个参数,则域中的所有 MBean
Coherence:*
(112)null
null
...如果我同时传递两个参数,则每个 MBean (128)
前两个结果是出乎意料的结果,表明QueryExp
我正在通过的一个问题,但我无法弄清楚问题是什么。我什至尝试只传递typeIsCache
orspecifiedNodeId
作为第二个参数(使用coherence
ornull
作为第一个参数),但我总是得到 0 个结果。
我对 JMX 非常熟悉——对问题所在有什么见解吗?(仅供参考,监控工具将在 Java 5 上运行,所以像 JMX 2.0 这样的东西现在对我没有帮助。)