Objet Target Probe

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

L'objet Target est facultatif. Si aucun objet Target n'est indiqué, la sonde s'applique à toutes les classes traitées par le moteur d'instrumentation.

L'objet Target permet de créer des règles de filtrage afin d'inclure ou d'exclure des méthodes de l'instrumentation en fonction des masques que respecte le nom, le package et la classe de la méthode, ainsi que sa signature. Les masques peuvent comporter des caractères génériques, "*" correspondant à zéro ou plusieurs caractères.

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

L'objet Target inclut les propriétés suivantes :
Propriété Description
type Obligatoire. La propriété type détermine si une sonde est ou non appliquée à une méthode cible. Entrez include pour appliquer la sonde aux classes et méthodes correspondant aux masques génériques, ou exclude pour les exclure.
package Facultatif. Indiquez un masque générique à comparer avec la partie du package des noms de classes. Par exemple : java.util* correspondra à chaque classe dans le package java.util et ses sous-packages. Sans indication particulière, la valeur par défaut est *.
className Facultatif. Indiquez un masque générique à comparer avec les noms de classes. Sans indication particulière, la valeur par défaut est *.
method Facultatif. Indiquez un masque générique à comparer avec les noms de méthodes. Sans indication particulière, la valeur par défaut est *.
signature Facultatif. Indiquez un masque générique à comparer avec une signature de méthode, à savoir la chaîne représentant les arguments et le type de retour de la méthode. Il s'agit du format interne Java pour les signatures de méthodes. Par exemple : (Ljava/lang/Object;)D est la signature d'une méthode qui prend un objet comme paramètre et renvoie un double. Le masque générique peut servir à distinguer plusieurs méthodes surchargées. Sans indication particulière, la valeur par défaut est *.

Remarques :

  • Une sonde peut comporter plusieurs objets Target contenant une série de règles de ciblage. Pour cibler uniquement les méthodes indiquées, ajoutez un objet Target final spécifiant package=* className=* method=* signature=* type=exclude après l'objet Target pour les méthodes concernées.
  • Les noms de packages et de classes indiqués dans un objet Target sont également comparés à ceux de toutes les interfaces implémentées par une classe. Par exemple, java.util.HashMap implémente l'interface java.util.Map. Si une sonde cible le package java.util, le nom de classe Map et le nom de méthode size, il sera appliqué à java.util.HashMap.size() et à la méthode size de toute classe implémentant l'interface Map.
  • La concordance de masques ne prend pas en compte les relations d'héritage : si la classe Derived étend la classe Base et si une sonde cible Base.run(), celle-ci ne s'appliquera pas automatiquement à Derived.run().
  • Si le masque de package dans un objet Target se limite à un point ("."), il représente la package Java global sans nom. Vous pouvez ainsi cibler des classes dans ce package. Exemple :
    <target type="include" package="." class="SomeClass" method="*" />
    <target type="exclude" package="*" class="*" method="*" />
    Avec ces deux règles de ciblage, la sonde cible la classe SomeClass dans le package global tout en excluant le reste des classes. Selon ces règles, une classe nommée SomeClass et figurant dans un autre package est exclue.
  • Les sondes de site d'appel comparent des masques et des règles de ciblage au package, à la classe, au nom et à la signature d'une méthode appelée. La concordance est effectuée par rapport à la méthode appelée et connue au moment de la compilation, à savoir les noms de classe et de méthode connus de façons statistique et non les méthodes réelles qui seront appelées en raison des fonctions d'héritage et virtuelles. Si l'appel est réalisé via une interférence d'interface, le nom de celle-ci doit correspondre.
Exemple
<target
  type="include"
  package="com.example"
  className="*Proxy"
  method="Get*"
/>

Figurant dans
Objet de sonde

Rubrique parent : Référence Probekit

Copyright IBM Corporation et autres 2000, 2004.