【发布时间】:2010-11-07 19:42:19
【问题描述】:
我正在使用 JMX 构建一个自定义工具,用于监控工作中的远程 Coherence 集群。我能够很好地连接并直接查询 MBean,并且我已经获得了几乎所有我需要的信息。但是,我在尝试查询 MBean 以获取集群中的特定缓存时遇到了问题,我可以在其中找到有关获取/放置总数、每个平均时间等的统计信息。
当我使用 JConsole 连接到远程进程时,我尝试以编程方式访问的 MBean 是可见的,并且具有如下名称:
Coherence:type=Cache,service=SequenceQueue,name=SEQ%GENERATOR,nodeId=1,tier=back
如果我可以动态获取特定节点 ID 的所有 type=Cache 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() 还是queryNames(),查询都会返回一个包含...的 Set
- ...0 个对象如果我传递上面显示的参数
- ...0 个对象如果我将
null传递给第一个参数 - ...
Coherence:*域 (112) 中的所有 MBean,如果我将null传递给第二个参数 - ...如果我为两个参数都传递了
null,则每个 MBean (128)
前两个结果是出乎意料的,提示我路过的QueryExp有问题,但不知道是什么问题。我什至尝试将typeIsCache 或specifiedNodeId 传递给第二个参数(coherence 或null 作为第一个参数),但我总是得到 0 个结果。
我对 JMX 非常熟悉 — 对问题所在有什么见解吗? (仅供参考,监控工具将在 Java 5 上运行,因此 JMX 2.0 之类的东西目前对我没有帮助。)
【问题讨论】:
标签: java jmx mbeans oracle-coherence