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: