Távolítsa el a dupla osztásjelek használatát a JMX ObjectName elemekből

Ez a szabály a dupla osztásjel ("//") potenciális használatát látja el jelzővel a javax.management.ObjectName konstruktorok tartomány részében. A JSR 255 a "//" jeleket a javax.management.ObjectName tartomány részében tervezi használni a "lépcsőzetes elrendezés" elválasztójaként. Míg a JSR 255 nem része a Java SE 6-os változatának, addig az objektumnév tartomány részében a jövőbeli kompatibilitási problémák elkerülése érdekében nem ajánlott szerepeltetni a "//" jeleket.

Az objektumnevek a következő formátumot követik:

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

melyben változó számú kulcstulajdonság szerepelhet.

Ha alkalmazása olyan objektumneveket tartalmazó MBean komponenseket foglal magában, melyek tartománynevében dupla osztásjel található, akkor módosítania kell az érintett MBean komponensek tartománynevét.

Ez a szabály megvizsgálja az ObjectName konstruktorokat, és ha lehetséges, ellenőrzi a karaktersorozat tartomány részét, hogy az nem tartalmaz-e dupla osztásjeleket. A szabály a String literálokat vagy végleges String változókat átadó konstruktorokat is képes elemezni, melyek ugyanabban a fordítási egységben kerültek meghatározásra. Ha meg tudja vizsgálni a tartománynevet, akkor csak azokat a konstruktorokat látja el jelzővel, melyek megsértik a szabályt.

A szabály az ObjectName konstruktor változóként kódolt tartománynévvel rendelkező példányait is ellátja jelzővel, melyeket így nem lehet könnyen megvizsgálni. Végezze el saját kezűleg ezen példányok vizsgálatát, hogy ellenőrizze: a tartománynevek nem tartalmaznak dupla osztásjelet.

1. példa:

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

Az 1. példában a szabály jelzővel látja el a myObj1 és myObj3 objektumot, mivel ezen karaktersorozatok tartalmazzák a "//" jelet. A szabály a myObj2 objektumot nem látja el jelzővel.

2. példa:

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

A 2. példában a szabály a myObj2 objektumot igen, a myObj1 objektumot azonban nem látja el jelzővel.

3. példa:

public MyClass {
import javax.management.ObjectName;

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

A 3. példában a szabály jelzővel látja el a myObj objektumot, mivel a kód nem tudja meghatározni a tartománynevet.

További információkért tekintse meg a következőket: