staticField および staticInitializer プローブの例

この例では、staticField データ項目および staticInitializer プローブ・フラグメントの使用法を示します。

この例では、クラスのインスタンスがいつ作成されたかを、プローブが追跡します。 あるクラスのインスタンスが作成されてから、そのクラスの次のインスタンスが作成されるまでに 1 秒を超えた場合に、 プローブがログ・メッセージを書き込みます。

以下に、このプローブで行う処理を示します。
  1. 静的フィールド定義を使用して、プローブは、プローブされた各クラスごとに Date 型の静的フィールドを作成します。 この静的フィールドは、new Date(); を呼び出して初期化されます。
  2. staticInitializer フラグメントで、プローブはロード時に、 プローブされたクラスの Date インスタンスを「時刻ゼロ (time zero)」(1970 年 1 月) に設定します。
  3. entry フラグメントで、プローブは、直前の更新が実行されたのがいつかを調べ、 その更新が実行されてから 1 秒を超えていた場合はレポートを出します。 (ターゲット規則により、entry フラグメントはコンストラクターでのみ実行します。)
  4. 最後にプローブは、Date インスタンスの値を「now」に更新します。

プローブは静的フィールド定義を使用して、プローブされた各クラスごとに新しい静的フィールドを作成します。 一方、クラス有効範囲でのフラグメントを使用して日付 (Date) フィールドを宣言すると、 そのプローブ・フラグメントを保持している生成済みクラスに Date の単一インスタンスが表示されます。 これは、プローブが適用されているクラスの数に関係ありません。 これは、プローブされた各クラスのインスタンスが作成される間の遅延を追跡するのではなく、 プローブされた任意のクラスのインスタンスが作成される間の時間遅延を追跡する場合に利用できます。

このプローブは、Probekit エディターで以下の項目によって定義されます。
  • 静的フィールドの完全修飾 Java 型 (Fully qualified Java type for static field) (ツリー・ペインで「プローブ」を右クリックし、「新規」 > 「静的フィールド」の順にクリックして、以下の値を入力します):

    java.util.Date

  • ターゲット (ツリー・ペインで「ターゲット」を選択し、 「編集」をクリックして、以下の値を入力します):
    • ターゲット型: include
    • パッケージ名パターン: com.sample* (ここでは 実際のパッケージ名を使用します)
    • メソッド名パターン: <init>
  • ターゲット (編集ペインで「追加」をクリックし、 「編集」をクリックして、以下の値を入力します):
    • ターゲット型: exclude
    • パッケージ名パターン: *
  • フラグメント (ツリー・ペインで「フラグメント」を選択して、 以下の値を入力します):
    • フラグメント型: entry
    • データ項目:
      • データ型: staticField名前: lastInstanceDate
      • データ型: className名前: clname
    • Java コード:

      java.util.Date d = new java.util.Date();
      long now = d.getTime();
      long prev = lastInstanceDate.getTime();
      if (prev != 0 && prev + 1000 < now) {
        System.out.println("[" + clname + " instance after > 1 second]");
      }
      lastInstanceDate.setTime(now);

    • フラグメント (「プローブ」を右クリックし、 「新規」 > 「フラグメント」の順に選択して、以下の値を入力します):
      • フラグメント型: staticInitializer
      • データ項目:
        • データ型: staticField名前: lastInstanceDate
        • データ型: className名前: clname
      • Java コード:

        lastInstanceDate.setTime(0);
        System.out.println("[" + clname + " class loaded]");

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.