Înlăturarea utilizării slash-urilor duble în elemente JMX ObjectName

Această regulă semnalează utilizarea potenţială a slash-urilor duble, "//" în partea de domeniu a constructorilor javax.management.ObjectName. JSR 255 planifică să utilizeze "//" în partea de domeniu a unui javax.management.ObjectName ca separator pentru "cascading". În timp ce JSR 255 nu este parte din Java SE 6, se recomandă ca partea de domeniu a unui obiect ObjectName să nu conţină şirul "//" pentru a evita problemele de compatibilitate viitoare.

ObjectName este de forma:

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

cu un număr de variabile ale proprietăţilor cheie.

Dacă aplicaţia dumneavoastră conţine MBean-uri cu ObjectName care au un nume de domeniu cu un dublu slash, va trebui să schimbaţi numele de domeniu pentru acele MBean-uri.

Această regulă inspectează constructorii ObjectName şi, dacă este posibil, verifică partea cu domeniul din şir pentru a verifica dacă nu există slash-uri duble. Va fi capabilă să scaneze constructorii care transmit literali Şir sau o variabilă Şir finală care este definită în aceeaşi unitate de compilare. Dacă poate inspecta numele de domeniu, se vor semnala numai acei constructori care încalcă regula.

Regula va semnala, de asemenea, instanţele constructorului ObjectName care are numele de domeniu codat ca variabilă care nu este disponibilă rapid pentru inspecţie. Inspectaţi manual aceste instanţe pentru a verifica că numele de domenii nu conţin slash-uri duble.

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

În Exemplul 1, regula va semnala myObj1 şi myObj3 deoarece aceste şiruri conţin "//". myObj2 nu va fi semnalat.

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

În Exemplul 2, regula va semnala myObj2, dar nu myObj1.

Exemplul 3:

public MyClass {
import javax.management.ObjectName;

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

În Exemplul 3, myObj va fi semnalat deoarece codul nu poate determina numele de domeniu.

Pentru informații suplimentare, vedeți: