Это правило помечает потенциальное использование удвоенной косой черты ("//") в разделе домена конструкторов javax.management.ObjectName. В JSR 255 планируется использовать "//" в разделе домена javax.management.ObjectName как разделитель для "каскадности". Хотя JSR 255 не является частью Java SE 6, не рекомендуется, чтобы раздел домена в ObjectName содержал "//", во избежание несовместимости в будущем.
ObjectName имеет следующий формат:
domain:key1=value1,key2=value2,key3=value3,*с переменным числом свойств ключ/значение.
Если в приложении есть объекты MBean с ObjectName, в которых имя домена содержит удвоенную косую черту, то необходимо изменить имя домена для таких MBean.
Это правило проверяет конструкторы ObjectName и по возможности проверяет раздел домена в строке на наличие удвоенных косых черт. Оно способно проверять конструкторы, в которые передаются литералы объектов String и переменные типа final String, определенные в том же модуле компиляции. Если есть возможность проверить имя домена, то помечаются только те конструкторы, которые нарушают правило.
Правило может также помечать экземпляры конструктора ObjectName, у которых имя домена указано переменной, и ее невозможно проверить. Такие экземпляры необходимо проверить вручную и убедиться, что имена доменов не содержат удвоенную косую черту.
Пример 1:
| < span class="Code" > 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"); } |
В примере 1 правило помечает myObj1 и myObj3, поскольку эти строки содержат "//". myObj2 помечен не будет.
Пример 2:
| < span class="Code" > 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); } |
В примере 2 правило помечает myObj2, но не myObj1.
Пример 3:
| < span class="Code" > public MyClass {
import javax.management.ObjectName; private ObjectName getMyObjectName(String myObjectName){ ObjectName myObj = ObjectName(myObjectName); } } |
В примере 3 помечается myObj, поскольку код не может определить имя домена.
Дополнительная информация: