PEXA Serviceについて

チュートリアル

テストツール

定義ファイル

基本プロセス

拡張プロセス

Condition

セッション

モデル

リファレンス

環境設定

目次

  1. はじめに
  2. サービスの呼出時ログを出力するには
  3. ログ出力設定の実行中切替
  4. ロガー実装クラスの置き換え
  5. ServiceSessionログエントリファイルの全体構成
  6. 設定例:
  7. ServiceSessionログエントリファイルのサンプル


はじめに

このドキュメントは、PEXAサービスフレームワークで使用するServiceSessionログエントリファイルについて解説する物です。

ServiceSessionログエントリファイルは、サーバーサイドのサービスが呼出されたことを記録するログについての設定ファイルです。
呼出ログの対象となるサービス名及びログ内容を指定することが出来ます。

サービスの呼出ログを使用する目的としては以下のようなものが有ります。

  • システム運用時にサーバーサイドの機能が呼び出されたことを証明するためのログを採取する。
  • テストで再利用するために呼出パラメータを記録する
特に後者については、ClientLauncherから呼び出すことが出来るServiceRunnerというツールを使用することで、
ログに記録された呼出パラメータをそのまま再利用して対象サービスのテストに利用することが出来ます。

記述形式はPEXA独自のプロパティ形式となります。
このプロパティ形式の書式については、リファレンスを参照して下さい。


サービスの呼出時ログを出力するには

サービスの呼出時ログ出力機能は、デフォルトではオフになっています。
ログ出力機能をONにするためには、JavaVMの起動時に以下のようなパラメータを指定する必要があります。

この指定はServerサイドのアプリケーションサーバー実行JavaVMに指定する必要があります。
なお、このログ機能はサーバーサイドのサービス呼出を対象としており、クライアントサイドのサービスは対象外となります。

サービス呼出時のログ出力モードの指定

JavaVMの起動引数として設定する、サービスのログ出力モードの指定です。
以下のような指定方法になります。

記述形式:

	-Dservice_session_logging={ログ出力モードの指定}
指定できるログ出力モードは以下の3種類になります。
ENTRYを指定した場合は、後述する-Dservice_session_logging_entryパラメータでサービスセッションログエントリファイルのURLを指定する必要があります。

モード 説明
OFF サービスログ出力を一切行わないモードです。
何も指定しないとデフォルトでこのモードになります。
ALL すべてのサービスの呼出をログ出力対象とするモードです。
大量のデータがセッション上に乗っていると動作が極端に遅くなる場合があります。
ENTRY 指定したサービスの呼出のみログ出力するモードです。
別途サービスセッションログエントリファイルを作成して、そのURLを後述する-Dオプションで指定します。


指定例:

	-Dservice_session_logging=ALL


サービスセッションログエントリファイルのURLの指定

サービスセッションログの出力モードで"ENTRY"を指定した場合には、必ず同時に指定する必要があるパラメータです。
JavaVMの起動引数として設定し、サービスセッションログエントリファイルのURLを指定します。

記述形式:

	-Dservice_session_logging_entry={サービスセッションログエントリファイルのURL}
例:ローカルディスク上にあるサービスセッションログエントリファイルを指定する場合
	-Dservice_session_logging_entry=file:///C:/develop/workspace/service_session_logging.entry
例:Webサーバーに格納したサービスログエントリファイルを指定する場合
	-Dservice_session_logging_entry=http://pexa.atrris.com/service_session_logging.entry



ログ出力設定の実行中切替

JavaVM起動時引数で、"-Dservice_session_logging=ENTRY"と指定している場合に限り、ログ出力設定を再起動なしで切り替えることが可能です。
ClientLauncherの[Service Refresh]を実行することにより、ServiceSessionログエントリファイルの再読込が行われて設定が読み込み直されます。

この機能を利用して、サービスの動作テスト等でログ出力対象サービスを切り替えながら進めることが出来ます。

また、後述するServiceSessionログエントリファイル中のservice_session_logging属性を書き換えることで、JavaVM引数で指定したロギングモードを上書き設定出来ます。
この仕組みを利用すると、再起動なしでログ出力を一時的にOFFにして、その後ENTRYモードに戻すといった制御が可能です。


ロガー実装クラスの置き換え

デフォルトでは、ログ出力処理を行う実装クラスはPEXA実行エンジン側で用意されている以下の物が使用されます。

    pexa.server.concept.base.service.CommonServiceFacadeSessionLogger
この実装では、commons logging APIを使用して文字列としてサービス呼出ログを出力します。

もし、このような方式ではなく例えば呼出ログをDBに保存したいといった個別の要件がある場合は、
ロガー実装クラスを個別の要件にあわせて用意して実行時に置き換えることが可能です。

その場合、指定のインタフェースを実装したクラスを一から作成するか、
もしくは上記の標準実装クラスをextendsして、一部のメソッドのみオーバーライドして作成する事になります。

作成したクラスを実行時に使用するには、src/plugin/pexa_plugins.entryファイルに以下のように記述して下さい。

    service_session_logger    {ロガー実装クラス名(フルパッケージ名)}

また、サーバーサイドのJavaVM起動オプションで以下のように指定することもできます。
JavaVM起動オプションで指定された場合、pexa_plugins.entryの指定よりもこちらのほうが優先されます。
    -Dservice_session_logger={ロガー実装クラス名(フルパッケージ名)}

ロガー実装クラスを一から作成する場合

この場合、以下のインタフェースをimplementsしたクラスを作成します。

    pexa.share.service.logger.ServiceSessionLogger
このインタフェースには3つのメソッドが宣言されているので、それらを実装して下さい。

なお、実装クラスのコンストラクタでは、以下のクラスを引数で受け取るようにして下さい。

    pexa.share.service.logger.ServiceSessionLoggerSchema
これはServiceSessionログエントリファイルの内容を元にFactoryクラスが生成して渡してくる動作設定情報です。
この内容を参照しながらログ出力処理を行うように実装して下さい。

例:
/**
 * コンストラクタ
 * @param schema サービス呼出ログの動作設定情報
 */
public CustomServiceSessionLogger(ServiceSessionLoggerSchema schema){
    this.schema = schema;
}


ロガー実装クラスを標準実装クラスをextendsして作成する場合

この場合、以下のクラスをextendsしたロガー実装クラスを作成して下さい。

    pexa.server.concept.base.service.CommonServiceFacadeSessionLogger

実装クラスのコンストラクタでは、以下のクラスを引数で受け取るようにして下さい。

    pexa.share.service.logger.ServiceSessionLoggerSchema
これはServiceSessionログエントリファイルの内容を元にFactoryクラスが生成して渡してくる動作設定情報です。
この場合は親クラスのコンストラクタにそのまま渡して下さい。

例:
/**
 * コンストラクタ
 * @param schema サービス呼出ログの動作設定情報
 */
public CustomServiceSessionLogger(ServiceSessionLoggerSchema schema){
    super(schema);
}

また、以下のメソッドをオーバーライドして下さい。

/**
 * サービスの開始から完了までの情報をログ出力する。
 * @param serviceNameKey サービス名(Key)
 * @param clientInfo 呼出元クライアント情報
 * @param startTime サービス実行開始時刻
 * @param finishTime サービス実行完了時刻
 * @param startSession 開始時セッション情報
 * @param finishSession 完了時セッション情報
 */
protected void flush(Key serviceNameKey, String clientInfo, Date startTime, Date finishTime, String startSession, String finishSession) {
/**
 * サービスの開始から中断までの情報をログ出力する。
 * @param serviceNameKey サービス名(Key)
 * @param clientInfo 呼出元クライアント情報
 * @param startTime サービス実行開始時刻
 * @param abortTime サービス実行中断時刻
 * @param startSession 開始時セッション情報
 * @param abortSession 中断時セッション情報
 * @param t 例外情報
 */
protected void flush(Key serviceNameKey, String clientInfo, Date startTime, Date abortTime, String startSession, String abortSession, Throwable t) {
これらは実際のログ出力処理を行うために標準実装クラスが呼び出しているメソッドなので、
ここがオーバーライドされることで、実装次第で例えばDBへの書き込みを行ったり、
通信で別のノードに送信すると言ったことを行うことが出来ます。



ServiceSessionログエントリファイルの全体構成

Serviceログエントリファイルの全体構成について、以下に示します。
servicesセクションの中に、ログ出力対象の情報を列挙します。

;;--------------------------------------
;; general setting
;;--------------------------------------
service_session_logging属性(0|1)    OFF/ENTRY/ALL
stacktrace属性(0|1) OFF/ON
(sessionセクション(0|1)
    input属性(0|1)  OFF/ON
    output属性(0|1) OFF/ON
    abort属性(0|1)  OFF/ON
)
;;--------------------------------------
;; services setting
;;--------------------------------------
(servicesセクション(0|1)
    (ログ出力対象サービス名セクション(0以上)
        stacktrace属性(0|1) OFF/ON
        (sessionセクション(0|1)
            input属性(0|1)  OFF/ON
            output属性(0|1) OFF/ON
            abort属性(0|1)  OFF/ON
        )
    )
)
	
記述注:
    属性        あらかじめ決められた値を選択する(true/falseなど)
    宣言部      値または、値のリストを設定する
    セクション  入れ子で他の属性、宣言部、セクションを保持する可能性がある
                (値又は、値のリストが設定される場合もある)

    (1):必須
    (0|1):オプション
    (1以上):一個以上必須
    (0以上):0個以上(オプション)

service_session_logging属性

JavaVM起動引数で指定する-Dservice_session_loggingと同じ、サービス呼出ログの動作モード指定です。
ServiceSessionログエントリファイルでservice_session_logging属性を記述することで、JavaVMの起動引数で指定したロギングモードを上書き設定することが出来ます。

これを利用すると、ClientLauncherから[Service Refresh]を実行することでサーバー側の再起動なしでロギングモードの変更が可能です。


stacktrace属性

サービスの実行が中断された場合のエラースタックトレースのログ出力に関するモード設定です。
これをONにしておくことで、中断の原因となったエラー情報のスタックトレースがログ出力されます。

出力する場合はON、出力しない場合はOFFと指定して下さい。
記述を省略した場合のデフォルト値はONになります。


sessionセクション

ログ出力対象とするセッション内容に関する指定を行うセクションです。
以下の3種類のセッション情報についてそれぞれON/OFFの指定を行うことが出来ます。
それぞれの記述を省略した場合のデフォルト値はONになります。

  • input属性:サービスが呼び出された際の呼出パラメータを格納したセッション内容
  • output属性:サービスの実行結果として呼出元に返却するパラメータを拡張したセッション内容
  • abort属性:サービスの中断が発生した時点におけるセッション内容


servicesセクション

servicesセクション内に、ログ出力対象にしたいサービス名をつけたセクションを列挙します。
ここに記述されたサービスがログ出力対象になります。

サービス名のみを記述して、サービス毎の詳細設定を記述しなかった場合は全体設定側の指定が適用されます。


ログ出力対象サービス名セクション

ログ出力対象とするサービス毎に、stacktrace属性及びsessionセクションを記述することが出来ます。
このサービス毎の個別設定が記述されている場合、個別設定側が優先されて動作に適用されます。



ログ対象のServiceのみ指定する場合

ログ出力対象のサービスは指定するが、詳細設定はしない場合の記述は以下のような形になります。

(services
    ;-----------------------------------------------------
    ; サービス名のみ指定する場合の記述1
    ;-----------------------------------------------------
    SSR.XXXを検索する		""
    ;-----------------------------------------------------
    ; サービス名のみ指定する場合の記述2
    ;-----------------------------------------------------
    (SSR.YYYを検索する
    )
)


ログ対象のServiceと出力対象ログを指定する場合

ログ出力対象のサービスを指定し、さらに出力内容を個別設定する場合は以下のような形になります。

(services
    ;-----------------------------------------------------
    ; スタックトレースと呼出セッションのみ記録したい場合
    ;-----------------------------------------------------
    (SSR.XXXを検索する
        stacktrace    ON
        (session
            input     ON
            output    OFF
            abort     OFF
        )
    )
)


全体設定とログ対象サービスの個別設定の両方を指定する場合

全体設定及び個別設定の両方を指定する場合は以下のような形になります。

;;--------------------------------------
;; general setting
;;--------------------------------------
service_session_logging    ENTRY
stacktrace  OFF
(session
    input   ON
    output  OFF
    abort   OFF
)
;;--------------------------------------
;; services setting
;;--------------------------------------
(services
    ;-----------------------------------------------------
    ; 全体設定に加えて返却セッション、中断セッションもONにしたい場合
    ;-----------------------------------------------------
    (SSR.XXXを検索する
        (session
            output    ON
            abort     ON
        )
    )
)


ServiceSessionログエントリファイルのサンプル

;;--------------------------------------
;; 全体設定
;; スタックトレース、中断セッションをOFF
;;--------------------------------------
service_session_logging     ENTRY
stacktrace  OFF
(session
    input   ON
    output  ON
    abort   OFF
)
;;--------------------------------------
;; 個別設定
;;--------------------------------------
(services
    ;;------------------------------------
    ;;対象指定のみ、詳細指定は全てON
    ;;------------------------------------
    SSR.Test.SearchTestHeaderModel      ""
    ;;------------------------------------
    ;;対象指定のみ、詳細指定は全てON
    ;;------------------------------------
    (SSR.Test.CreateTestHeaderModel
    )
    ;;------------------------------------
    ;;呼出のみ記録しセッション情報は全てOFF
    ;;------------------------------------
    (SSR.Test.UpdateTestHeaderModel
        stacktrace  OFF
        (session
            input   OFF
            output  OFF
            abort   OFF
        )
    )
)


更新情報

  • 最終更新者 : $Author: morishita $
  • 最終更新日時 : $Date:: 2010-12-16 15:37:53 #$
  • バージョン : $Revision: 5827 $



Copyright © 2006, Atrris Corporation