5

ObjectName式のマッチングを使用してmbeanにアクセスする際に問題が発生しました。次のコードはブールbを正常に設定します。

ObjectName objName =
    new ObjectName("UnifiedSystem-search Cluster Control l-c:class=myclass");
boolean b = (boolean)myMBeanServer.invoke(objName, "areAlertsSuppressed");

問題は、コーディング環境によってmbeannameが変わることです。ただし、名前はわずかに変更されるだけです。これは、ObjectNamesがサポートする組み込みの式に一致することで簡単に処理できます。次のコード(上記と同じ環境)は、InstanceNotFoundExceptionをスローします。

ObjectName objName =
    new ObjectName("UnifiedSystem-search Cluster Control *:class=myclass");
boolean b = (boolean)myMBeanServer.invoke(objName, "areAlertsSuppressed")

探している結果を得る方法について何かアイデアはありますか?

4

1 に答える 1

15

objectnameがワイルドカードを使用している場合、mbeanにアクセスできません

私の知る限り、このメソッドObjectNameではワイルドカードパターンを処理しませんinvoke。このメソッドを使用してmyMBeanServer.queryNames(...)、パターンに一致するBeanを見つける必要があります。invoke次に、特定の名前で呼び出すことができます。

Set<ObjectName> nameSet = myMBeanServer.queryNames(new ObjectName(
       "UnifiedSystem-search Cluster Control *:class=myclass"), null);
// then use the first name from the set
// some error checking is needed here to make sure there is a name in the set
myMBeanServer.invoke(nameSet.iterator().next(), "areAlertsSuppressed")
于 2012-11-16T19:31:01.423 に答える