staticField および staticInitializer の例

以下の例では、staticField データ項目と StaticInitializer プローブ・フラグメントの使用方法について示しています。

この例では、プローブが、クラスのインスタンスがいつ作成されるかを追跡します。そのクラスの直前のインスタンス作成のあと 2 秒後以降にインスタンスが作成された場合、プローブはログ・メッセージを書き込みます。

このプローブの処理を以下に示します。
  1. プローブは、staticField データ項目を使用して、すべてのプローブ実行済みクラス内に Date 型の静的フィールドを作成します。静的フィールドは、new Date(); を呼び出すことにより初期化されます。
  2. staticInitializer フラグメントで、プローブはプローブ実行済みクラスの Date インスタンスを、これがロードされた「時間ゼロ」 (1970 年 1 月) に設定します。
  3. entry フラグメント (ターゲット・ルールにより、entry フラグメントはコンストラクターのみで実行されるため) で、プローブは前の更新がいつ実行されたかを確認し、更新が実行されてから 2 秒以上過ぎている場合はレポートを発行します。
  4. 最後に、プローブは Date インスタンスの値を「now」に更新します。

このプローブは、staticField を使用して、すべてのプローブ実行済みクラス内に新しい静的フィールドを作成します。これと比較して、fragmentAtClassScope を使用して Date フィールドを宣言した場合、プローブが適用されるクラスの数に関係なく、プローブ・フラグメントを格納する生成済みクラス内に Date の単一インスタンスが現れます。各プローブ実行済みクラスのインスタンス作成の間の時間遅延ではなく、任意のプローブ実行済みクラスのインスタンス作成の間の時間遅延を追跡する場合、この方法を使用することができます。

このサンプル・コードを使用するには、ターゲット・オブジェクトの package="com.sample*" で、実際のパッケージ名を参照するように変更してください。

XML で &< の文字を使用するには、文字エンティティー &amp;&lt; をこの例に示すように指定する必要があります。

<?xml version="1.0" encoding="ASCII"?>
<probekit>
  <probe>
    <target type="include" package="com.sample*" method="&lt;init>" />
    <target type="exclude" package="*" />
    <staticField type="java.util.Date"/>
    <fragment type="entry">
      <data name="lastInstanceDate" type="staticField"/>
      <data name="clname"/>
      <code>         java.util.Date d = new java.util.Date();
         long now = d.getTime();
         long prev = lastInstanceDate.getTime();
         if (prev != 0 &amp;&amp; prev + 1000 &lt; now) {
           System.out.println("[" + clname + " instance after > 1 second]");
         }
         lastInstanceDate.setTime(now);
       </code>
    </fragment>
    <fragment type="staticInitializer">
      <data name="lastInstanceDate" type="staticField"/>
      <data name="clname"/>
      <code>         lastInstanceDate.setTime(0);
         System.out.println("[" + clname + " class loaded]");
      </code>
    </fragment>
  </probe>
</probekit>

親トピック: Probekit の例

関連資料
StaticField プローブ・オブジェクト
staticInitializer プローブ・フラグメント

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