カスタムのインターセプタとルールの作成
インストルメンテーション ロジックの実装
iSDK は、必要なカスタム インターセプタ ロジックでサブクラス化する必要がある AGenericInterceptor というクラスを提供します。
エージェントは、エージェントの sdk-plugins ディレクトリに展開された .jar ファイルを調べて、AGenericInterceptor を拡張するクラスを探します。これらのクラスが、必要な抽象化メソッドを実装する必要があります。
すべてのインターセプタが実装する必要がある主要なメソッドの 1 つは、IRule インターフェイスを拡張するオブジェクトのリストを返す initializeRules メソッドです。これらの IRules は、指定されたインターセプタを適用する必要があるコード内の場所を表します(クラス名、メソッド名、メソッドパラメータなど)。
インターセプタがインストゥルメント化されたコードで使用されている java オブジェクトのいずれかでリフレクションを実行する必要がある場合は、実行時にこのようなリフレクションを容易にするために、インターフェイス IReflector が提供されています。
AGenericInterceptor で実装する重要なメソッド
initializeRules:インターセプタを配置する必要があるコード内の場所を記述するオブジェクトのリストを返しますonMethodBegin:このメソッドの本文に含まれるコードは、インストルメント化されたメソッドの実行前に実行されます。onMethodEnd:このメソッドの本文に含まれるコードは、インストルメント化されたメソッドの実行後に実行されます。
AGenericInterceptors をエージェント API と組み合わせて、トランザクションの開始/終了、スナップショットへのデータの追加などを実行できます。これらのインターセプタは、メソッドの最初または最後だけではなく、コード内の任意の場所に適用できます。また、ローカル変数情報を収集します。atLineNumber、atField、atLocalVariable などのルールビルダーの特定のメソッドは、さまざまな iSDK インターセプタにのみ適用されます。
- 最上位の "sdk-plugins" ディレクトリに直接配置された jar もロードされます。
- プラグイン jar でマニフェスト属性 "Plugin-Classes: <comma separated list of fully qualified class names>" を使用して、プラグインとしてロードする特定のクラスを指定できます。指定すると、プラグイン jar にプラグインではない多くのクラスが含まれている場合に、jar のロードパフォーマンスが向上します。