この演習を開始する前に、『演習 1.4: 高度なプローブの作成』を参照す ることをお勧めします。
Probekit を使用すると、単純な Java コード・フラグメントが含まれた単純なプローブを簡単 に作成できます。 演習 1.4 で説明したように、基本的なプローブを使用していくつかの高度な処理も実行できます。 しかし場合によっては、単純なプローブでは実行できないさらに複雑な処理を実行したいことがあります。 このような場合は、実行したいすべてのロジックをプローブ・フラグメントに組み込む代わりに、プローブ 用の「ランタイム・サポート・ライブラリー」を作成できます。 こうすることで、プローブ・フラグメントから、実際の処理内容がすべて含まれているこのライブラリーにある機能を呼び出すことができます。
ランタイム・ライブラリーを使用する場合は、場合によっては、リフレクションを使用してそのライブ ラリーのメソッドを呼び出す必要があります。 その理由は、生成済みのプローブ・クラスはブートストラップ・クラス・ローダーによっ てロードされ、これらのクラスはシステム・クラス・ローダーによってロードされるクラスには直接 アクセスできないからです。
以下に、ランタイム・ライブラリー内の entryHandler メソッドを呼び出す entry フラグ メントの例を示します。
ここでは、呼び出したい 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 回で済むようにすると、各呼び出しの時間が節約できます。
チュートリアルの締めくくりとして、『要約』で学習内容を再確認 してください。