O Objeto Target da Probe

O objeto Target da probe é 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 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 em padrões que são correspondidos em relação ao nome do pacote, classe e método, além da assinatura do método. Os padrões podem conter curingas, em que "*" corresponderá a zero ou mais caracteres.

Se os padrões de curinga de um Target corresponderem ao pacote, classe, nome e assinatura de um método, a propriedade type determina se o método é instrumentado (include) ou não (exclude). Se os padrões não corresponderem ao pacote, classe, nome e assinatura de um método, por padrão, o método é 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 a classes e métodos que correspondem aos padrões curinga ou exclude para excluí-los.
package Opcional. Especifique um padrão curinga para ser correspondido com relação à porção do pacote dos nomes de classe. Por exemplo: java.util* corresponderá a todas as classes no pacote java.util e seus subpacotes. Se não for especificado, o valor padrão é *.
className Opcional. Especifique um padrão curinga para ser correspondido com relação aos nomes de classes. Se não for especificado, o valor padrão é *.
method Opcional. Especifique um padrão curinga para ser correspondido com relação aos nomes de métodos. Se não for especificado, o valor padrão é *.
signature Opcional. Especifique um padrão curinga para ser correspondido com relação à assinatura de um método - isto é, a cadeia que representa os argumentos do método e o tipo de retorno. Isso está no formato interno do Java para assinaturas de métodos. Por exemplo: (Ljava/lang/Object;)D é a assinatura de um método que obtém um Object como um parâmetro e retorna um double. Esse padrão curinga pode ser utilizado para distinguir entre métodos sobrecarregados. Se não for especificado, o valor padrão é *.

Notas:

  • Uma probe pode ter múltiplos objetos Target que contêm sucessivas regras de destino. Para alvejar apenas os métodos especificados, inclua um objeto Target final que especifique package=* className=* method=* signature=* type=exclude após o objeto Target dos métodos que deseja alvejar.
  • Os nomes de pacote e de classe especificados em um objeto Target também são verificados em relação aos nomes do pacote e de classe de quaisquer interfaces implementadas por uma classe. Por exemplo, java.util.HashMap implementa a interface java.util.Map. Se uma probe alvejar o pacote java.util, o nome de classe Map e o nome de método size, a probe será aplicada a java.util.HashMap.size() e ao método size de quaisquer outras classes que implementem a interface Map.
  • A correspondência de padrões não considera a herança de relacionamentos: se a classe Derived estender a classe Base e uma probe alvejar Base.run(), a probe não será aplicada automaticamente a Derived.run().
  • Se o padrão do pacote em um objeto Target for um único caractere de ponto ("."), ele representa o pacote Java global sem nome. Isso permite alvejar explicitamente as 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 alveje a classe SomeClass no pacote global, ao mesmo tempo que exclui todas as demais classes. De acordo com essas regras, uma classe denominada SomeClass que esteja em qualquer outro pacote será excluída.
  • As probes de callsite correspondem regras e padrões de destino com relação ao pacote, classe, nome e assinatura de um método chamado. A correspondência é feita com relação ao método chamado como ele era conhecido no momento da compilação; isto é, em relação aos nomes de classe e método conhecidos estaticamente, não os métodos reais que serão chamados devido à herança e funções virtuais. Se a chamada for feita utilizando uma referência de interface, o nome da interface deve ser correspondido.
Exemplo
<target
  type="include"
  package="com.example"
  className="*Proxy"
  method="Get*"
/>

Contido por
O Objeto Probe

Tópico Pai: Referência de Elemento de Probekit

Termos de Uso | Feedback
(C) Copyright IBM Corporation 2000, 2004. Todos os Direitos Reservados.