演習 1.5: 複雑なプローブ・ロジックへのランタイム・ライブラリーの使用

始める前に、『演習 1.4: 拡張プローブの作成』を読んでおくことをお勧めします。

Probekit を使えば、簡単な Java コード・フラグメントを使用して、単純なプローブを簡単に記述できます。演習 1.4 でご覧の通り、基本的なプローブで高度な内容も実行できます。しかし、単純なプローブでは実行できない、もっと複雑なタスクを実行したいこともあるでしょう。このような場合、実行したいロジックすべてをプローブ・フラグメントに収めようとする代わりに、プローブのための「ランタイム・サポート・ライブラリー」を作成できます。その後、プローブ・フラグメントから、実際のアクションがすべて格納されているこのライブラリーをコールできます。

ランタイム・ライブラリーを使用する場合、メソッドをコールするのに反映する必要があることもあります。この理由は、生成済みのプローブ・クラスは bootstrap クラス・ローダーによってロードされるため、system クラス・ローダーによってロードされたクラスに直接アクセスできないためです。

以下は、「エントリー」フラグメントがランタイム・ライブラリーにある entryHandler メソッドを呼び出す例です。

呼び出しの対象となる静的メソッド entryHandler を持つ com.sample.ProbeSupport クラスが存在すると想定します。想定では、entryHandler には引き数はありません。また、クラスはシステム・クラス・ローダーでロードできると想定します。

try {
  String className = "com.sample.ProbeSupport";
  ClassLoader sysLoader = ClassLoader.getSystemClassLoader();
  Class cls = Class.forName(className, true, sysLoader);
  java.lang.reflect.Method mth = cls.getMethod("entryHandler", null);
  mth.invoke(null, null);
}
catch (Throwable t) {
  System.out.println("Probe error while attempting reflection:");
  t.printStackTrace();
}

それぞれの呼び出し時刻を保管するために、クラス有効範囲でのフラグメントを使用して java.lang.reflect.Method 静的オブジェクトを宣言し、それを 1 回だけ初期化できます。

要約』に記載されている資料を確認してチュートリアルを完了します。

ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.
(C) Copyright IBM Japan 2005