2009-07-03 94 views
4

我正在使用JMX構建自定義工具,以監視工作中的遠程集羣Coherence。我能夠很好地連接並直接查詢MBean,並且已經獲得了我需要的幾乎所有信息。然而,當我試圖查詢MBeans在集羣中的特定緩存時遇到了一個問題,在這裏我可以找到關於get/puts的總數,每個平均時間等的統計信息。JConsole中可見的Coherence節點MBean的JMX查詢問題

MBeans I 「M試圖訪問編程是可見的,當我使用JConsole中連接到遠程的過程,有一個像這樣的名字:

Coherence:type=Cache,service=SequenceQueue,name=SEQ%GENERATOR,nodeId=1,tier=back 

這將使我是否可以動態地抓取所有type=Cache MBean的特定節點ID更靈活而不指定所有的緩存。我試圖查詢它們是這樣的:

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對象如果我通過上述
  • ... 0對象所示的參數如果我通過null爲第一個參數
  • ...在Coherence:*域(112)的所有MBean如果我通過null作爲第二個參數
  • ...每單個MBean(128)如果我通過null對於兩個參數

前兩個結果是意想不到的,並提出QueryExp我正在通過一個問題,但我無法弄清楚問題是什麼。我甚至嘗試傳遞第二個參數typeIsCachespecifiedNodeIdcoherencenull作爲第一個參數),我總是得到0個結果。

我用JMX很綠 - 任何洞察問題是什麼? (僅供參考,監控工具會在Java 5上運行,所以像JMX 2.0絕不會幫我在這一點上。)

回答

4

只是想後我留給後人解決方案...

我一直能夠通過更簡單(但又陌生)的方法成功檢索與指定特徵匹配的MBeans集合。我仍然不知道爲什麼QueryExp方法是行不通的,但這裏的是什麼工作(取代的最後一行代碼在我的問題):

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

的對象名添加片段service=SequenceQueue時,它也可以通過Coherence服務(緩存)名稱進行過濾的構造函數字符串。

只要它以某種方式工作,就足以讓我完成工作,但這似乎是JMX實現中的一個明顯缺陷。並且不要讓我開始使用JMX和RMI創建工作的JMXServiceURL的過程...

1

我墮落了和你一樣的道路,我認爲JDK文檔可能會更清晰。

Query *似乎只能匹配基礎MBean的屬性(即真正的POJO獲取者),而ObjectName模式能夠匹配ObjectName本身內的鍵/值。

在ObjectName域內進行更復雜的查詢具有很大的靈活性。