L'objet de sonde Target

L'objet de sonde Target est une spécification des classes et des méthodes auxquelles la sonde doit être appliquée.

L'objet Target est facultatif. Lorsqu'aucun objet Target n'est spécifié, la sonde sera appliquée à toutes les classes traitées par le moteur d'instrumentation.

L'objet Target vous permet de créer des règles de filtre pour inclure ou exclure des méthodes de l'instrumentation en fonction de masques qui sont satisfaits par rapport au nom du module, de la classe et de la méthode, plus la signature de la méthode. Les masques peuvent contenir des caractères génériques, où "*" correspond à zéro ou plusieurs caractères.

Si les masques génériques de l'objet Target correspondent au nom et à la signature d'un module, d'une classe de méthode, la propriété type détermine si la méthode est instrumentée (include) ou non (exclude). Si les masques ne correspondent pas au nom et à la signature d'un module, d'une classe d'une méthode, par défaut, la méthode est instrumentée.

L'objet Target présente les propriétés suivantes :
Propriété Description
type Obligatoire. La propriété type détermine si une sonde est appliquée ou non à une méthode cible. Spécifiez include pour appliquer la sonde aux classes et aux méthodes correspondant aux masques génériques, exclude pour les exclure.
package Facultative. Spécifiez un masque générique correspondant à la partie du module des noms de classe. Par exemple : java.util* correspondra à chaque classe du module java.util et de ses sous-modules. Si non spécifié, la valeur par défaut est *.
className Facultative. Spécifiez un masque générique pour correspondre aux noms de classe. Si non spécifié, la valeur par défaut est *.
method Facultative. Spécifiez un masque générique pour correspondre aux noms de méthode. Si non spécifié, la valeur par défaut est *.
signature Facultative. Spécifiez un masque générique pour correspondre à la signature d'une méthode, c'est-à-dire la chaîne représentant les arguments de la méthode et le type de renvoi. Il se présente au format interne Java des signatures de méthode. Par exemple : (Ljava/lang/Object;)D est la signature d'une méthode qui utilise un Object comme un paramètre et renvoie un double. Ce masque générique peut être utilisé pour différencier les méthodes en surcharge. Si non spécifié, la valeur par défaut est *.

Remarques :

  • Une sonde peut comprendre plusieurs objets Target contenant des règles de ciblage successives. Pour ne cibler que les méthodes que vous spécifiez, ajoutez un objet Target final qui spécifie package=* className=* method=* signature=* type=exclude après l'objet Target pour les méthodes que vous souhaitez cibler.
  • Les noms de module et de classe spécifiés dans un objet Target sont également vérifiés par rapport aux noms de module et de classe des interfaces qu'une classe met en oeuvre. Par exemple, java.util.HashMap met en oeuvre l'interface java.util.Map. Si une sonde cible le module java.util, le nom de classe Map et le nom de méthode size, la sonde sera appliquée à java.util.HashMap.size() et à la méthode size d'une quelconque autre classe mettant en oeuvre l'interface Map.
  • Un masque correspondant ne prend pas en compte les relations d'héritage : si la classe Derived étend la classe Base et qu'une sonde cible Base.run(), la sonde ne sera pas appliquée automatiquement à Derived.run().
  • Si le masque de module d'un objet Target est un point ("."), il représente le module Java global et sans nom. Ceci vous permet de cibler explicitement des classes dans le module global. Par exemple :
    <target type="include" package="." class="SomeClass" method="*" />
    <target type="exclude" package="*" class="*" method="*" />
    Ces deux règles cibles entraînent la sonde à cibler la classe SomeClass du module global tout en excluant toutes les autres classes. Grâce à ces règles, une classe appelée SomeClass, qui se trouve dans un autre module, est exclue.
  • Les sondes de site d'appel correspondent à des masques et des règles cibles quant au nom et à la signature de module, de classe d'une méthode appelée. La correspondance est réalisée sur la méthode appelée telle que connue au moment de la compilation, c'est-à-dire quant aux noms de classe et de méthode statistiquement connus, et non aux méthodes réelles qui seront appelées en raison de fonctions d'héritage et virtuelles. Si l'appel est réalisé via une référence d'interface, le nom de l'interface doit correspondre.
Exemple
<target
  type="include"
  package="com.example"
  className="*Proxy"
  method="Get*"
/>

Contenu par
L'objet Probe

Sujet parent : Références concernant les éléments Probekit

Conditions d'utilisation | Commentaires
(C) Copyright IBM Corporation 2004. All Rights Reserved.