代码之家  ›  专栏  ›  技术社区  ›  Quinn Taylor

JConsole中可见的一致性节点MBean的JMX查询问题

  •  4
  • Quinn Taylor  · 技术社区  · 17 年前

    我正在使用JMX构建一个用于监视远程数据的自定义工具 Coherence 集群在起作用。我能够很好地连接MBean并直接查询MBean,而且我已经获得了几乎所有我需要的信息。然而,我在试图查询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() 或 queryNames()

    • ... 0对象 如果我通过上面显示的参数
    • ... null
    • …所有的MBean都在 Coherence:* 域名(112)如果我通过 无效的
    • …每一个MBean(128)如果我通过 无效的

    前两个结果是意想不到的 ,并在 QueryExp 我要通过,但我不知道问题出在哪里。我甚至试着通过 typeIsCache 或 specifiedNodeId 对于第二个参数(使用 coherence 或 无效的 作为第一个参数),我总是得到0个结果。

    我对JMX很熟悉,对问题有什么见解吗?(仅供参考,监控工具将在Java5上运行,所以像JMX2.0这样的东西在这一点上对我没有帮助。)

    2 回复  |  直到 17 年前
        1
  •  4
  •   Quinn Taylor    17 年前

    我已经能够通过一种更简单(但更陌生)的方法成功地检索到与指定特征匹配的MBean集。我仍然不知道为什么 QueryExp 这种方法不起作用,但以下是有效的方法(替换我问题中的最后一行代码):

    Set<ObjectName> cacheMBeans = mBeanServer.queryNames(new ObjectName("Coherence:type=Cache,nodeId="+nodeId+",*"), null);
    

    service=SequenceQueue 在ObjectName构造函数中,按一致性服务(缓存)名称筛选的字符串。

    只要它能以某种方式工作,就足以完成我的工作,但这似乎是JMX实现中的一个明显缺陷。不要让我开始使用JMX和RMI创建工作的JMXServiceURL的过程。。。

        2
  •  1
  •   Jon Travis    16 年前

    Query.*似乎只能匹配底层MBean的属性(即真正的POJO getter),而ObjectName模式能够匹配ObjectName本身中的键/值。