本文へスキップ

トランザクションのエンドポイント設定

トランザクションエンドポイントは、トランザクションの開始メソッドです。HTTPトランザクションの場合は、HttpServlet.service()またはFilter.doFilter()がトランザクションの開始点であり、トランザクションエンドポイントと呼びます。

NON HTTP追跡

トランザクションエンドポイントとして指定されたメソッドが開始されて終了するまでのパフォーマンスをトランザクションパフォーマンスと呼びます。Non HTTPトランザクションを追跡するには、エンドポイントを指定する必要があります。

ノート

エンドポイント検索

  1. トランザクションが呼び出されると推定されるすべてのメソッドのトレース追跡を設定してください。
  2. 再起動後、トランザクションを発生させてモニタリングしてください。
  3. back stackオプションをオンにして、入力メソッドを正しく理解してください。

対象選択

  1. メソッドトレース設定

    メソッドトレースを設定します。トランザクションで呼び出されるクラスを指定してください。DBを使用するプログラムでは、JDBCドライバーが便利です。

    whatap.conf
    hook_method_patterns=jdbc.*.*
    hook_method_access_public_enabled=true
    hook_method_access_protected_enabled=true
    hook_method_access_none_enabled=true
  2. トランザクション開始オプションの設定

    メソッドが呼び出されたら、トランザクションを開始します。トランザクション開始オプションとトランザクション開始時にスタックをダンプするオプションをオンにします。

    whatap.conf
    trace_auto_transaction_enabled=true
    trace_auto_transaction_backstack_enabled=true
  3. 再起動後のトレース分析

    再起動してください。あとからサービスを呼び出すと、トランザクションが追跡されていることがわかります。

    トランザクションを検索すると、jdbc.*で始まるすべてのクラスのメソッドがこのトランザクションで表示されることがわかります。トランザクショントレースを検索すると、TRANSACTION BACKSTACKというメッセージステップが表示されます。

    TRANSACTION BACKSTACK
    jdbc.FakePreparedStatement.executeQuery(FakePreparedStatement.java),
    com.virtual.dao.SelectDAO.execute2(SelectDAO.java:29),
    com.virtual.web.SimulaNonHttp.execute(SimulaNonHttp.java:147),
    com.virtual.web.SimulaNonHttp.process(SimulaNonHttp.java:76),
    com.virtual.web.SimulaNonHttp.run(SimulaNonHttp.java:100)
  4. スタックの内容を確認

    スタックの内容を確認することで、どのメソッドから開始するかを推定できます。

    Example
    com.virtual.web.SimulaNonHttp.execute(SimulaNonHttp.java:147),
    com.virtual.web.SimulaNonHttp.process(SimulaNonHttp.java:76),
    com.virtual.web.SimulaNonHttp.run(SimulaNonHttp.java:100)

    上記の3つのメソッドのいずれかをトランザクションの開始点として判断できます。この状況では、逆コンパイルを実行して適切なトランザクションエンドポイントを決定する必要があります。

    ロジックを見ると、SimulaNonHtp.run内でwhile()が動作しながらSimulaNonHtp.process()を呼び出し、SimulaNonHtp.execute()が実行されます。process()が適当であることがわかります。この部分はソースを見て判断する必要があります。

    Tips

    エンドポイントの最も**重要な基準は終了機能です。**通常の状態では、遅延することなく直ぐに終了する必要があり、パフォーマンスの判断ができます。

トランザクションのエンドポイント指定

  1. トランザクションの開始点を次のように設定します。

    whatap.conf
    hook_service_patterns=com.virtual.web.SimulaNonHttp.process
  2. アプリケーションを再起動してください。

process()メソッドは、新しいトランザクションのエンドポイントになります。

ノート

hook_service_patternsオプションではワイルドカード文字を使用できません。2つ以上の値を設定するにはコンマ(,)を区切り文字として利用してください。

トランザクション名の定義

一般的に、メソッド名でトランザクションを区別できます。

whatap.conf
service_name_mode=[full,class,method,string,arg]
service_name_index=0
  • service_name_mode

    full, class, method, string, argの5つのオプションを指定できます。

    • full: Full Class名をサービス名として使用します。

    • class: Class名をサービス名として使用します。

    • method:Method名をサービス名として使用します。

    • string:文字列の最初のパラメータをサービス名として使用します。

    • arg:パラメータでservice_name_indexオプションに指定されたインデックスにパラメータをサービス名として使用します。

プラグイン使用

注意

プラグインは、十分に理解している場合にのみ使用してください。

_WHATAP_HOME_経路の下位にpluginフォルダを作成し、pluginへ移動します。viコマンドでAppServiceStart.xファイルを作成します。

プラグインの使用例

println("test");と入力して保存すると、画面に、"test"という文字列が出力されます。確認後、パラメータから情報を抽出してください。

次の例ではHashMapこの引数で渡され、このHashMapには'url'というキーが含まれています。

Object url =((java.util.HashMap)$point.getArgs()[0]).get("url");
$ctx.service((String)url);
//println("url="+url);

このようにプラグインを作成すると、トランザクション名が変更できます。