このページでは、POJO(Plain Old Java Object)アプリケーションのカスタム一致ルールを作成する方法について説明します。ライブデータをインタラクティブに処理して POJO を作成する手順については、「カスタムマッチルールのライブプレビュー」を参照してください。

POJOカスタムマッチルールについて

POJO のカスタム一致ルールを使用すれば、Pure Java アプリケーションを実行するアプリケーション環境や、自動的には検出されないエントリポイントを含んだフレームワークを使用するアプリケーション環境で、ビジネストランザクション検出を構成できます。  

アプリケーションの既知のエントリポイントによって特徴付けられる一般的なフレームワークとは異なり、POJOエントリポイントのビジネストランザクションの論理エントリポイントは、アプリケーションのどのメソッドになることもできます。

このため、カスタム POJO エントリポイントを構成するには、AppDynamics がビジネス トランザクション エントリ ポイントと見なすメソッドを指定する必要があります。メソッドの実行の開始と終了は、ビジネストランザクションの開始と終了に対応するので、メソッドは、ビジネストランザクションの実行をすべてカプセル化する必要があることに留意してください。  

例えば、メソッド実行シーケンスについて考慮します。

com.foo.threadpool.WorkerThread.run()
    calls com.foo.threadpool.WorkerThread.runInternal()
        calls com.foo.Job.run()
CODE

run() メソッドへの最初の 2 つのコールは、ジョブを受け入れて呼び出すブロッキングメソッドです。ジョブがビジネストランザクションの呼び出しのたびに実行され、ビジネストランザクションと同時に終了するため、Job.run() メソッドは実際のワークユニットであると言えます。

これらのメソッドは、POJO エントリポイントの最適な候補になります。POJO トランザクションの応答時間はこのエントリポイントから測定され、リモートコールは Servlet のサービスメソッドのリモートコールと同じようにトラッキングされます。 

POJOカスタムマッチルールの作成

POJO を含むカスタムマッチルールをエントリポイントタイプとして追加することにより、POJO エントリポイントを作成できます。エージェントはカスタムマッチルールに基づいてビジネストランザクションを命名します。

エージェントが POJO トランザクションを検出するために、カスタムマッチルールは、POJO トランザクション モニタリングに対応するデフォルトの Java 自動トランザクション検出ルールも含むスコープに属する必要があります。


[Background Task] チェックボックスをオンにすると、一致するトランザクションをバックグラウンドタスクとして分類できます。リクエストがバックグラウンドタスクとして実行される場合、AppDynamics はそのリクエストのビジネス トランザクション メトリックのみを報告します。バックグラウンドタスクのティアレベルおよびアプリケーションレベルでの応答時間とコールメトリックは集計されません。これにより、バックグラウンドタスクによってビジネスアプリケーションのベースラインが悪影響を受けることがなくなります。また、バックグラウンドタスク用に個別のしきい値セットを設定することもできます。詳細については、「バックグラウンドタスクのモニタリング」を参照してください。

カスタムマッチルール構成には、以下に説明するように、メソッド呼び出しをマッチングするオプションや一致したコールを別々のビジネストランザクションに分割するオプションが複数用意されています。  

IBM JVM v1.5またはv1.6上で実行している場合は、カスタムマッチルールを定義した後にJVMを再起動する必要があります。

クラスとメソッドによるマッチング

メソッドまたはメソッドが属するクラスのさまざまな形式に基づいて、カスタムルールの一致基準を指定できます。 

メソッド名一致基準を指定する場合、特定のメソッドの署名に一致させるパラメータマッチングを使用します。たとえば、以下のクラスの 1 つまたは複数のメソッドをインストゥルメント化するとします


class A
{
    public void m1();
    public void m1(String a);
    public void m1(String a, com.mycompany.MyObject b);
}
CODE


次のように、各メソッドのインストゥルメンテーションをその署名に基づいて構成します。

  • (パラメータのない)最初のメソッドの署名をインストゥルメント化するには、以下のようにPOJOベースのビジネストランザクションのマッチルールを作成します。
    • Match Classes:with a Class Name that Equals A
    • Method Name:Equals m1()
  • 2番目のメソッドをインストゥルメント化するには、次のようにマッチルールを作成します。
    • Match Classes:with a Class Name that Equals A
    • Method Name:Equals m1(java.lang.String)
  • 3番目のメソッドをインストゥルメント化するには、次のようにマッチルールを作成します。
    • Match Classes:with a Class Name that Equals A
    • Method Name:Equals m1(java.lang.String, com.mycompany.MyObject)

特定の注釈を含むクラスに属したメソッドもマッチさせることができます。たとえば、「@com.acme.Processor」の注釈が付けられたすべてのクラスをマッチさせるとします。次のようにカスタムルール構成で注釈を定義できます。

process()メソッド一致を呼び出した結果は、カスタムマッチルール名に基づいて命名されたビジネストランザクションになります。

インナークラスおよびインターインターフェースでのマッチング

クラス名の後ろに$記号を付けることで、インナークラスおよびインナーインターフェースでマッチすることができます。例えば、クラス名に対して以下を指定します。

 com.my.package.OuterClass$InnerClass

別々のビジネストランザクションへのマッチの分割

トランザクションのマッチングだけが構成されている場合、マッチルールで一致したすべてのリクエストがカスタムビジネストランザクションに属します。または、リクエストの基準に基づいて複数の名前付きビジネストランザクションを生成するマッチルールを作成できます。 

たとえば、次の構成では、スーパークラスで一致するカスタムマッチルールを定義します。この例では、エントリポイントは、com.acme.AbstractProcessor スーパークラスを拡張するクラスで定義された process() メソッドと一致します。スーパークラスはサブクラス SalesProcessorInventoryProcessorBacklogProcessor によって拡張されます。

  1. スーパークラスと一致するカスタムルールを作成すると、これらのすべてのサブクラスと一致します
  2. トランザクションをクラス名で分割すると、それぞれのサブクラスに対して個別のビジネストランザクションを作成できます。AppDynamics は、マッチルール名をクラス名の先頭に追加することで、トランザクションにクラス名を含む名前を付けます。たとえば、 Process.SalesProcessoProcess.InventoryProcessor、および Process.BacklogProcessor などです。

Rule Configuration

パラメータ値が、アプリケーションのビジネストランザクションにとって意味のある識別子になるものを含んでいる可能性があります。たとえば、次のメソッドの jobType パラメータに SalesInventory または Backlog の値があるとします。 

public void process(String jobType,String otherParameters...)
CODE

メソッドの署名におけるパラメータのゼロベースの位置(例では0)を示すことによって、パラメータ値に基づいてトランザクションを分割できます。

Transaction Splitting

toString() メソッドは、パラメータの値を変換する方法を示します。詳細については、「Getterチェーンの使用」を参照してくださいダイアログに示すように、スレッド ID、メソッド名、クラス名などの他のトランザクション分割基準を使用することもできます。

ルールの名前が、動的に生成された名前の先頭に付けられ、ビジネストランザクション名を形成します。

トランザクション分割からの一致の除外

除外ルールは、トランザクションインスタンスで一致した場合、それ以外の構成で行われるトランザクション分割を防止する基準を定義します。実際、これは、 除外条件で一致したトランザクションのサブセットに対してトランザクション分割の効果を無効にします。