コンテンツにスキップ

マッチングトランザクション

Matchedトランザクションを使用すると、JVM内の任意のメソッド呼び出しを取得してトランザクションに変換できます。Matchedトランザクションの機能は、jvmguardアノテーションを使用してコードで直接指定されるDeclaredトランザクションの機能を反映しています。

Matchedトランザクションは、コードにアノテーションを追加できない場合、または対象のクラスが外部ライブラリにある場合に必要です。それ以外の場合は、保守が容易なDeclaredトランザクションが推奨されます。

トランザクション定義のリストでは、フィルター式が各Matchedトランザクション定義の名前として表示されます。これが十分に説明的でない場合は、トランザクション設定の「カスタムの説明」チェックボックスを使用して意味のある名前を入力します。

jvmguardはトランザクション定義のリストをたどり、最初に一致したエントリの命名とポリシーを適用します。マッチングは最初の一致を取るため、より一般的なフィルターはトランザクション定義のリストの下位に配置する必要があることに注意してください。

これにより、定義のグループに共通のポリシー定義を保持しながら、すべて異なる命名スキームを持つ一連のトランザクション定義を定義できます。

Mappedトランザクションと同様に、最初の質問は、単一のメソッドを選択するか、特定のクラスのすべてのpublicメソッドを選択するかです。

Matchedトランザクションには、Mappedトランザクションと同じ継承に関する設定オプションがあります。「サブクラスと実装クラスもインターセプトする」チェックボックスで、派生クラスからのトランザクションをオンにできます。

単一メソッドトランザクションの場合、これはオーバーライドされたメソッドもトランザクションを作成することを意味します。そのようなメソッドがsuper呼び出しを行う場合、そのsuper呼び出しは別のトランザクションを作成します。両方のトランザクションの名前が等しい場合、super呼び出しは個別に記録されません。ただし、「インスタンスクラス名」命名要素を使用すると、2つの異なる名前を簡単に作成できます。その場合、superメソッドがネストされたトランザクションとして表示されます。これが望ましくない場合は、ウィザードの「命名」ステップで「ネストしたトランザクションを抑制する」オプションを値「このエントリに一致するエントリ」に設定できます。

対象のメソッドは、メソッドチューザーで便利に選択できます。接続されているすべてのVMのクラスや、その場でアップロードできるJARまたはWARファイルのクラスを表示できます。メソッドを手動で編集することもできます。その場合、メソッドシグネチャをバイトコード形式で入力するように注意する必要があります。

クラスの場合、選択したクラスのすべてのpublicメソッドがトランザクションを作成します。継承オプションがオンの場合、派生クラスでのメソッド選択に2つの異なる戦略から選択できます。

  • 実装またはオーバーライドするpublicメソッド: これは、対象のすべてのオペレーションをそのメソッドで定義するインターフェースを選択した場合に意味があります。実装クラスの追加のpublicメソッドは無視されます。
  • 実装クラスまたは派生クラスのすべてのpublicメソッド: 選択したクラスは基底クラスまたはマーカーインターフェースである可能性があり、対象のメソッドは派生クラスにあります。この場合、派生クラスのすべてのpublicメソッドがトランザクションを作成します。

トランザクションメソッドを収集する追加の方法として、staticメソッドを選択できます。継承オプションが選択され、すべてのpublicメソッドが使用されている場合、派生クラスのpublic staticメソッドも収集されます。

Mappedトランザクションで利用可能な命名要素に加えて、Matchedメソッドトランザクションには「メソッドパラメータ」命名要素があります。メソッドパラメータのインターセプションは、特定のメソッドが選択されている場合にのみ意味があるため、Matchedクラストランザクションでは利用できません。

パラメータはゼロベースのインデックスで選択できます。さらに、Mappedトランザクションで説明されている「インスタンス名」要素と同様に、getterチェーンをパラメータに適用できます。