Remover a utilização de barras duplas em elementos ObjectName do JMX

Esta regra sinaliza a utilização em potencial das barras duplas, "//" na parte do domínio dos construtores javax.management.ObjectName. O JSR 255 planeja utilizar "//" na parte do domínio de um javax.management.ObjectName como um separador para "cascading". Enquanto o JSR 255 não for parte do Java SE 6, é recomendado que a parte do domínio de um ObjectName não contenha a sequência "//" para evitar problemas de compatibilidade futuros.

ObjectNames estão no formato:

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

com um número variável de propriedades-chaves.

Se o seu aplicativo contiver MBeans com ObjectNames que possuam um nome de domínio com barras duplas, você precisará mudar o nome do domínio para esses MBeans.

Esta regra inspeciona os construtores ObjectName e, se possível, verifica a parte do domínio da sequência para verificar se não há barras duplas. Ela poderá fazer a varredura de construtores que passam Sequências literais ou uma variável de Sequência final que foram definidas na mesma unidade de compilação. Se puder inspecionar o nome de domínio, ela sinalizará apenas os construtores que violam a regra.

A regra também sinalizará instâncias do construtor ObjectName que possuem o nome do domínio codificado como uma variável que não está prontamente disponível para inspeção. Inspecione manualmente essas instâncias para verificar se os nomes de domínio não contêm barras duplas.

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

No Exemplo 1, a regra sinalizará myObj1 e myObj3 pois essas sequências contêm "//". myObj2 não será sinalizado.

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

No Exemplo 2, a regra sinalizará myObj2, mas não myObj1.

Exemplo 3:

public MyClass {
import javax.management.ObjectName;

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

No Exemplo 3, myObj será sinalizado por causa do código não poder determinar o nome de domínio.

Para obter informações adicionais, consulte: