Class MessagingAction

java.lang.Object
nablarch.core.db.support.DbAccessSupport
nablarch.fw.messaging.action.MessagingAction
All Implemented Interfaces:
Handler<RequestMessage,ResponseMessage>, TransactionEventCallback<RequestMessage>
Direct Known Subclasses:
MessagingAction

public abstract class MessagingAction extends DbAccessSupport implements Handler<RequestMessage,ResponseMessage>, TransactionEventCallback<RequestMessage>
被仕向同期応答処理を行う業務処理で使用するテンプレートクラス。

業務アクションハンドラは、本クラスを継承し、本クラスに定義されたテンプレートメソッドを必要に応じて実装する。

Author:
Iwauo Tajima
  • Constructor Details

    • MessagingAction

      @Published public MessagingAction()
      MessagingActionオブジェクトを生成する。
  • Method Details

    • onReceive

      @Published protected abstract ResponseMessage onReceive(RequestMessage request, ExecutionContext context)
      要求電文毎にフレームワークから起動され、要求電文の内容をもとに業務処理を実行する。

      Parameters:
      request - 要求電文オブジェクト
      context - 実行コンテキスト
      Returns:
      応答電文オブジェクト
    • onError

      @Published protected ResponseMessage onError(Throwable e, RequestMessage request, ExecutionContext context)
      業務トランザクションが異常終了した場合の処理を実行する。

      本メソッドは、業務トランザクションがロールバックされると起動される。 任意のエラー応答電文(ResponseMessage)を返却したい場合は、本メソッドをオーバーライドすること。 デフォルト実装ではなにもしない。

      注意: 以下のケースでは業務アクションへのディスパッチが行われる前にエラーが 発生するため、エラー応答電文の内容を制御することはできない。

      • フレームワーク制御ヘッダの形式不正
      • MOMミドルウェアのレイヤーで発生したエラー (JMSException等)
      Parameters:
      e - 発生したエラーオブジェクト
      request - 要求電文オブジェクト
      context - 実行コンテキスト
      Returns:
      エラー応答用電文。nullを返した場合はフレームワークが編集した電文が送信される。
    • usesAutoRead

      protected boolean usesAutoRead()
      電文のメッセージボディの内容をデフォルトのフォーマッタを使用して 自動的に読み込むかどうかを指定する。

      一般に使用される電文は (ヘッダーレコード) + (業務レコード) の2レイアウトで構成されることが多い。 そのようなケースでは本機能を有効にすることにより、 業務処理に制御が移った時点で、業務データ部の解析が全て完了した状態となり、 業務側で電文のレイアウトを意識した処理を実装する必要が無くなる。 (このオプションはデフォルトで有効となっている。)

      業務データ部が複数のレコードによって構成されている場合や、 単一のフォーマット定義ファイルで定義できない場合、さらには、電文レイアウトが 動的に変更されるといったケースでは、本メソッドをオーバーライドしfalseを返すことで、 業務データ部の読み込みを業務ロジック側で制御することができる。

      Returns:
      電文のメッセージボディの内容を自動的に読み込む場合は true
    • handle

      public ResponseMessage handle(RequestMessage req, ExecutionContext ctx)
      入力データに対する処理を実行する。 本クラスの実装では、まず最初にusesAutoRead()を呼ぶ。 その結果がfalseであればonReceive(RequestMessage, ExecutionContext) に処理を移譲し、その結果を返す。

      usesAutoRead()がtrueを返す場合は、業務ロジックに入る前に業務データ部の フォーマッタを使用して、メッセージボディから1レコード分のデータを読み込む。 業務データ部からレコードが読み込めない場合、または、1レコードの読み込みが完了 した時点でデータ終端に達しない場合はフォーマット不正のエラーを送出する。

      Specified by:
      handle in interface Handler<RequestMessage,ResponseMessage>
      Parameters:
      req - 入力データ
      ctx - 実行コンテキスト
      Returns:
      処理結果データ
    • transactionCallBackWatchType

      public Class<TransactionManagementHandler> transactionCallBackWatchType()
      このクラスでは、TransactionManagementHandler 上のトランザクションを監視する。
    • transactionAbnormalEnd

      public void transactionAbnormalEnd(Throwable e, RequestMessage data, ExecutionContext ctx)
      入力データに対する処理で異常が発生した場合に呼ばれる。
      Specified by:
      transactionAbnormalEnd in interface TransactionEventCallback<RequestMessage>
      Parameters:
      e - 発生したエラー
      data - 入力データ
      ctx - 実行コンテキスト
    • transactionNormalEnd

      public void transactionNormalEnd(RequestMessage data, ExecutionContext ctx)
      入力データに対する処理が正常に処理された場合に呼ばれる。
      Specified by:
      transactionNormalEnd in interface TransactionEventCallback<RequestMessage>
      Parameters:
      data - 入力データ
      ctx - 実行コンテキスト