Verwendung doppelter Schrägstriche in JMX-ObjectName-Elementen entfernen

Diese Regel markiert die potenzielle Verwendung des doppelten Schrägstrichs (//) in der Domänenkomponente von javax.management.ObjectName-Konstruktoren. JSR 255 plant die Verwendung des doppelten Schrägstrichs in der Domänenkomponente eines javax.management.ObjectName als Trennzeichen für kaskadierende Hierarchien. JSR 255 ist zwar nicht Teil von Java SE 6, es wird jedoch empfohlen, in der Domänenkomponente von Objektnamen keine doppelten Schrägstriche zu verwenden, um mögliche Kompatibilitätsprobleme in der Zukunft zu vermeiden.

Objektnamen haben das folgende Format

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

mit einer variablen Anzahl Schlüsseleigenschaften.

Wenn Ihre Anwendung MBeans mit Objektnamen enthält, die einen doppelten Schrägstrich enthalten, müssen Sie den Domänennamen für diese MBeans ändern.

Diese Regel überprüft ObjectName-Konstruktoren und stellt, falls möglich, sicher, dass der Domänenabschnitt der Zeichenfolge keine doppelten Schrägstriche enthält. Sie kann Konstruktoren, die Zeichenfolgeliterale oder eine finale, in derselben Kompiliereinheit definierte Zeichenfolgevariable übergeben, überprüfen. Wenn die Regel den Domänennamen überprüfen kann, kann sie nur die Konstruktoren markieren, die gegen die Regel verstoßen.

Diese Regel markiert auch Instanzen des ObjectName-Konstruktors, für die der Domänenname als Variable, die nicht ohne weiteres für die Prüfung bereitsteht, codiert wurde. Überprüfen Sie diese Instanzen manuell, um sicherzustellen, dass die Domänennamen keine doppelten Schrägstriche enthalten.

Beispiel 1:

public MyClass {
import javax.management.ObjectName;

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");
}

In Beispiel 1 markiert die Regel myObj1 und myObj3, da diese Zeichenfolgen doppelte Schrägstriche (//) enthalten. myObj2 wird nicht markiert.

Beispiel 2:

public MyClass {
import javax.management.ObjectName;

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

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

In Beispiel 2 markiert die Regel myObj2, aber nicht myObj1.

Beispiel 3:

public MyClass {
import javax.management.ObjectName;

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

In Beispiel 3 wird myObj markiert, weil der Code den Domänennamen nicht bestimmen kann.

Weitere Informationen finden Sie unter: