JMX ObjectName エレメント内のダブルスラッシュの使用を削除する

この規則は、 javax.managementのドメイン部分でダブルスラッシュ「//」が使用されている可能性があります。ObjectName コンストラクター。 JSR 255 は、javax.management のドメイン 部分で "//" を使用することを計画しています。「カスケード」の分離文字としての ObjectName。 JSR 255 は Java SE 6 の一部ではありませんが、ObjectName のドメイン部分には、今後、互換性の問題が生じないように、ストリング「//」を含めないことをお勧めします。

ObjectName は、次のような形式になっています。

domain:key1=value1,key2=value2,key3=value3,*

これに、不定数のキー・プロパティーが伴います。

ご使用のアプリケーションに、ダブルスラッシュを使用したドメイン・ネームを持つ ObjectName の付いた MBean が含まれている場合は、これらの MBean のドメイン・ネームを変更する必要があります。

この規則は、ObjectName コンストラクターを検査し、可能であればストリングのドメイン部分を検査して、ダブルスラッシュがないことを確認します。 これは、ストリング・リテラルや、同じコンパイル単位に定義された final String 変数を渡すコンストラクターをスキャンすることもできます。 ドメイン・ネームを検査できる場合、これは、規則に違反しているコンストラクターだけにフラグを立てます。

この規則は、すぐには検査に使用できない変数としてコーディングされているドメイン・ネームを持つ ObjectName コンストラクターのインスタンスにもフラグを立てます。 ドメイン・ネームにダブルスラッシュが含まれていないことを確認するために、これらのインスタンスを手動で検査してください。

例 1:

public MyClass {
import javax.management.オブジェクト名;

ObjectName myObj1 = ObjectName("domain//Name:key1=value1,*");
ObjectName myObj2 = ObjectName("domaiName", "key1", "value1");
Hashtable<String,String> myHashTable = new Hashtable<String,String>();
table.put("key1", "value1");
ObjectName myObj3 = ObjectName("domain//Name", myHashTable");
}

例 1 では、これらのストリングは"//". が含まれるために、この規則はmyObj1 およびmyObj3をフラグを立てます。しかし myObj2はフラグが立てられません。

例 2:

public MyClass {
import javax.management.オブジェクト名;

final String myDomainName = "domainName";
ObjectName myObj1 = ObjectName(myDomainName, "key1", "value1");

final String myObjectName = "domain//Name:key1=value1";
ObjectName myObj2 = ObjectName(myObjectName);
}

例 2 では、規則によって myObj2 にフラグが立てられますが、myObj1 には立てられません。

例 3:

public MyClass {
import javax.management.オブジェクト名;

private ObjectName getMyObjectName(String myObjectName){
ObjectName myObj = ObjectName(myObjectName);
}
}

例 3 では、コードがドメイン・ネームを判別できないため、myObj にフラグが立てられます。

この規則に対するクイック・フィックスはありません。

追加情報については、以下を参照してください。