Questa regola contrassegna il potenziale utilizzo della doppia barra, "//", nella parte del dominio dei costruttori javax.management.ObjectName. JSR 255 prevede di utilizzare "//" nella parte del dominio di un javax.management.ObjectName come separatore per "cascading". Poiché JSR 255 non fa parte di Java SE 6, si consiglia di non utilizzare le "//" nella parte del dominio di un ObjectName, per evitare futuri problemi di compatibilità.
ObjectNames sono nel formato:
domain:key1=value1,key2=value2,key3=value3,*con un numero variabile di proprietà chiave.
Se l'applicazione contiene MBeans con ObjectName che contengono un nome dominio con una doppia barra, sarà necessario modificare il nome dominio per tali MBeans.
Questa regola esamina i costruttori ObjectName e se possibile controlla la parte del dominio della stringa per verificare che non ci sia la doppia barra. Sarà in grado di analizzare i costruttori che passano valori letterali stringa o una variabile stringa final, definita nella stessa unità di compilazione. Se può esaminare il nome del dominio, contrassegnerà solo i costruttori che violano la regola.
La regola contrassegnerà anche le istanze del costruttore ObjectName che hanno il nome dominio codificato come una variabile che non è prontamente disponibile per l'ispezione. Esaminare manualmente tali istanze per verificare i nomi del dominio che non contengono un barra doppia.
Esempio 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"); } |
Nell'esempio 1, la regola contrassegnerà myObj1 e myObj3 perché quelle stringhe contengono "//". myObj2 non verrà contrassegnato.
Esempio 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); } |
Nell'esempio 2, la regola contrassegna myObj2 ma non myObj1.
Esempio 3:
|
public MyClass {
import javax.management.ObjectName; private ObjectName getMyObjectName(String myObjectName){ ObjectName myObj = ObjectName(myObjectName); } } |
Nell'esempio 3, myObj verrà contrassegnato perché il codice non riesce a determinare il nome del dominio.
Non è disponibile alcuna correzione rapida per questa regola.
Per ulteriori informazioni, consultare: