JMX を使用して、職場のリモートCoherenceクラスタを監視するためのカスタム ツールを構築しています。問題なく接続して MBean を直接クエリすることができ、必要なほぼすべての情報を取得できました。ただし、クラスター内の特定のキャッシュについて MBean にクエリを実行しようとしたときに問題が発生しました。ここで、gets/puts の合計数、それぞれの平均時間などに関する統計を確認できます。
プログラムでアクセスしようとしている MBean は、JConsole を使用してリモート プロセスに接続すると表示され、次のような名前が付けられます。
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 個のオブジェクト
- ...最初の引数に渡すと0 個のオブジェクト
null
- ...第 2 引数
Coherence:*
に渡す場合、ドメイン内のすべての MBean (112)null
null
...両方の引数を渡すと、すべての MBean (128)
最初の 2 つの結果は予期しないものQueryExp
で、 I'm passに問題があることを示唆していますが、何が問題なのかわかりません。2 番目のパラメータに or を (typeIsCache
最初のパラメータとしてorを使用して)渡してみましたが、常に 0 の結果が得られます。specifiedNodeId
coherence
null
私は JMX にかなり慣れています — 問題が何であるかについての洞察はありますか? (参考までに、監視ツールは Java 5 で実行されるため、現時点では JMX 2.0 などは役に立ちません。)