ターゲット・プローブ・オブジェクト

ターゲット・プローブ・オブジェクトは、プローブを適用する必要のあるクラスとメソッドの指定です。

ターゲット・オブジェクトはオプションです。ターゲット・オブジェクトを指定しない場合、インスツルメンテーション・エンジンで処理されるすべてのクラスにプローブが適用されます。

ターゲット・オブジェクトを使用すると、パッケージ、クラス、メソッド名、さらにメソッドのシグニチャーとの突き合わせのパターンに基づいて、メソッドをインスツルメンテーションの対象に含めたり除外したりするフィルター・ルールを作成することができます。パターンにはワイルドカードを含めることができます。「*」にはゼロ個以上の文字が一致します。

ターゲットのワイルドカード・パターンがメソッドのパッケージ、クラス、名前およびシグニチャーと一致する場合、type プロパティーによって、メソッドをインストゥルメントするか (include)、インストゥルメントしないか (exclude) が決定されます。 パターンがメソッドのパッケージ、クラス、名前、およびシグニチャーと一致しない場合、デフォルトではメソッドがインストゥルメントされます。

ターゲット・オブジェクトには次のプロパティーが含まれています。
プロパティー 説明
type 必須。type プロパティーは、プローブをターゲット・メソッドに適用するかどうかを決定します。ワイルドカード・パターンと一致するクラスおよびメソッドにプローブを適用する場合は include を指定し、このようなクラスおよびメソッドを除外する場合は exclude を指定します。
package オプション。クラス名のパッケージの部分と突き合わせるワイルドカード・パターンを指定します。例えば、java.util* は、java.util パッケージおよびそのサブパッケージ内のすべてのクラスと一致します。 指定しない場合、デフォルト値は * です。
className オプション。クラス名と突き合わせるワイルドカード・パターンを指定します。指定しない場合、デフォルト値は * です。
method オプション。メソッド名と突き合わせるワイルドカード・パターンを指定します。指定しない場合、デフォルト値は * です。
signature オプション。メソッドのシグニチャーと突き合せるワイルドカード・パターン、つまり、メソッドの引き数と戻り型を表すストリングを指定します。これは、メソッド・シグニチャーの Java 内部形式で指定します。例えば、(Ljava/lang/Object;)D は、パラメーターとして Object をとり、double を戻すメソッドのシグニチャーを示します。 このワイルドカード・パターンは、多重定義されたメソッドを区別するために使用できます。 指定しない場合、デフォルト値は * です。

注:

  • 1 つのプローブに、連続するターゲット設定ルールを含む複数のターゲット・オブジェクトを指定することができます。 指定したメソッドのみをターゲットとするには、ターゲットにするメソッドのターゲット・オブジェクトの後に package=* className=* method=* signature=* type=exclude を指定した最終ターゲット・オブジェクトを追加します。
  • ターゲット・オブジェクトに指定されたパッケージ名とクラス名には、クラスがインプリメントするインターフェースのパッケージ名およびクラス名に対するチェックも行われます。 例えば、java.util.HashMap は、インターフェース java.util.Map をインプリメントします。プローブがパッケージ java.util、クラス名 Map、メソッド名 size をターゲットとする場合、このプローブは java.util.HashMap.size() と、Map インターフェースをインプリメントするその他のクラスの size メソッドに適用されます。
  • パターン・マッチングでは、継承関係は考慮されません。クラス Derived がクラス Base を拡張し、プローブが Base.run() をターゲットとする場合、 このプローブは自動的には Derived.run() に適用されません。
  • ターゲット・オブジェクトのパッケージ・パターンが単一のピリオド文字 (「.」) である場合、これは名前なしのグローバル Java パッケージを表します。これを使用すると、グローバル・パッケージ内のクラスを明示的にターゲットと設定することができます。次に例を示します。
    <target type="include" package="." class="SomeClass" method="*" />
    <target type="exclude" package="*" class="*" method="*" />
    この 2 つのターゲット・ルールでは、プローブはグローバル・パッケージ内のクラス SomeClass をターゲットとし、他のすべてのクラスを除外します。これらのルールにより、他のパッケージ内にある SomeClass という名前のクラスが除外されます。
  • 呼び出しサイト・プローブは、ターゲット・パターンとルールを、呼び出し先メソッドのパッケージ、クラス、名前、およびシグニチャーと突き合わせします。呼び出し先メソッドに対してはコンパイル時の名前で突き合わせが行われます。つまり、継承関数や仮想関数によって呼び出される実際のメソッドではなく、静的に認識されたクラスおよびメソッドの名前との突き合わせが行われます。 インターフェース参照によって呼び出しが行われる場合は、インターフェース名が一致している必要があります。
<target
  type="include"
  package="com.example"
  className="*Proxy"
  method="Get*"
/>

親トピック: Probekit エレメント参照

使用条件 | フィードバック
(C) Copyright IBM Corporation 2004. All Rights Reserved. (C) Copyright IBM Japan 2004