O Objeto Probe Target

O objeto probe Target é uma especificação das classes e métodos aos quais a probe deve ser aplicada.

O objeto Target é opcional. Quando nenhum Target for especificado, a probe será aplicada a todas as classes que forem processadas pelo mecanismo de instrumentação.

O objeto Target permite criar regras de filtragem para incluir ou excluir métodos da instrumentação com base nos padrões que são correspondidos no pacote, na classe e no nome do método, mais a assinatura do método. Os padrões podem conter curingas, em que "*" corresponderá a zero ou mais caracteres.

Se os padrões de curingas de Target corresponderem a um pacote, classe, nome e assinatura de um método, a propriedade type determinará se o método será instrumentado (include) ou não (exclude). Se os padrões não corresponderem a um pacote, classe, nome e assinatura de um método, por padrão, o método será instrumentado.

O objeto Target inclui as seguintes propriedades:
Propriedade Descrição
type Obrigatório.A propriedade type determina se uma probe é aplicada ou não a um método de destino. Especifique include para aplicar a probe em classes e métodos que correspondem aos padrões de curingas, exclude para excluí-los.
package Opcional. Especifique um padrão de curinga para corresponder à parte dos nomes de classe de um pacote. Por exemplo: java.util* corresponderá a cada classe no pacote java.util e em seus subpacotes. Se não for especificado, o valor padrão será *.
className Opcional. Especifique um padrão de curinga para corresponder aos nomes de classes. Se não for especificado, o valor padrão será *.
method Opcional. Especifique um padrão de curinga para corresponder aos nomes de métodos. Se não for especificado, o valor padrão será *.
signature Opcional. Especifique um padrão de curinga para corresponder a uma assinatura de método - ou seja, a cadeia que representa os argumentos e o tipo de retorno do método. Ele está no formato interno Java para assinaturas de método. Por exemplo: (Ljava/lang/Object;)D é a assinatura de um método que utiliza um Objeto como um parâmetro e retorna o dobro. Esse padrão de curinga pode ser utilizado para distinguir entre métodos sobrecarregados. Se não for especificado, o valor padrão será *.

Notas:

  • Uma probe pode ter vários objetos Target que contêm regras de destino sucessivas. Para que apenas os métodos especificados sejam de destino, inclua um objeto Target final, que especifica package=* className=* method=* signature=* type=exclude, após o objeto Target para os métodos que deseja como destino.
  • Os nomes de pacotes e classes especificados em um objeto Target também são verificados nos nomes de pacotes e classes de quaisquer interfaces que uma classe implemente. Por exemplo, java.util.HashMap implementa a interface java.util.Map. Se uma probe tem como destino o pacote java.util, o nome da classe Map e o nome do método size, a probe será aplicada a java.util.HashMap.size() e ao método size de qualquer outra classe que implemente a interface Map.
  • A correspondência de padrões não considera os relacionamentos de herança: se a classe Derived estender a classe Base e uma probe tiver como destino Base.run(), a probe será automaticamente aplicada a Derived.run().
  • Se o padrão do pacote em um objeto Target for um caractere de um único ponto ("."), ele representará o pacote Java global, não nomeado. Isso permite que você utilize explicitamente como destino classes no pacote global. Por exemplo:
    <target type="include" package="." class="SomeClass" method="*" />
    <target type="exclude" package="*" class="*" method="*" />
    Essas duas regras de destino fazem com que a probe utilizem como destino a classe SomeClass no pacote global, enquanto exclui todas as outras classes. Por essas regras, uma classe chamada SomeClass que está em qualquer outro pacote será excluída.
  • As probes callsite correspondem padrões e regras de destino com o pacote, a classe, o nome e a assinatura de um método chamado. A correspondência é feita com o método chamado, conforme ele era conhecido no momento da compilação; ou seja, com os nomes de classes e métodos conhecidos estaticamente e não com os métodos reais que serão chamados devido à herança e às funções virtuais. Se a chamada for feita através de uma referência de interface, o nome da interface deverá ser correspondido.
Exemplo
<target
  type="include"
  package="com.example"
  className="*Proxy"
  method="Get*"
/>

Contido por
O Objeto Probe

Tópico-pai: Referência do Kit Probe

Copyright IBM Corporation e outros 2000, 2004.