Supprimer l'utilisation des double barres obliques dans les éléments JMX ObjectName

Cette règle marque l'utilisation potentielle de la double barre oblique "//" dans la portion domaine des constructeurs javax.management.ObjectName. JSR 255 prévoit d'utiliser "//" comme séparateur dans la portion domaine d'un constructeur javax.management.ObjectName pour les "cascades". JSR 255 ne fait pas partie de Java SE 6, mais il est recommandé que la portion domaine d'un constructeur ObjectName ne contienne pas la chaîne "//" pour éviter les futurs problèmes de compatibilité.

Les constructeurs ObjectName sont de la forme suivante :

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

avec un nombre variable de propriétés de clé.

Si votre application contient des beans gérés avec des constructeurs ObjectName dont le nom de domaine contient une double barre oblique, vous devez modifier le nom de domaine de ces beans gérés.

Cette règle inspecte les constructeurs ObjectName et vérifie si possible la portion domaine de la chaîne pour vérifier qu'il n'existe pas de double barre oblique. Elle peut analyser les constructeurs qui transmettent des littéraux chaîne ou une variable de chaîne finale définie dans la même unité de compilation. Si elle peut inspecter le nom de domaine, elle ne marque que les constructeurs qui violent la règle.

La règle marque également les instances du constructeur ObjectName dont le nom de domaine est codé comme variable qui ne peut pas être inspectée telle quelle. Inspectez manuellement ces instances pour vérifier que les noms de domaine ne contiennent pas de double barre oblique.

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

Dans l'exemple 1, la règle marque myObj1 et myObj3 car ces chaînes contiennent "//". myObj2 n'est pas marqué.

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

Dans l'exemple 2, la règle marque myObj2, mais pas myObj1.

Exemple 3 :

public MyClass {
import javax.management.ObjectName;

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

Dans l'exemple 3, myObj est marqué car le code ne peut pas déterminer le nom de domaine.

Pour plus d'informations, voir :