Class AsyncMessageReceiveAction

All Implemented Interfaces:
DataReaderFactory<RequestMessage>, Handler<RequestMessage,Result>, ExecutionHandlerCallback<CommandLine,Result>, TransactionEventCallback<RequestMessage>

@Published(tag="architect") public class AsyncMessageReceiveAction extends BatchAction<RequestMessage>
MQ応答なし受信用アクション。

本クラスでは、受信したメッセージが保持するリクエストID(RequestMessage.getRequestPath())を元に、 受信テーブルに電文を保存する。

受信テーブルの構造は、必ず下記構造にすること。

 ----------------- -----------------------------------------------------
 受信電文連番       主キー
                   受信した電文(メッセージ)を一意に識別するためのIDを格納するカラム。
                   本カラムに設定する値は、#generateReceivedSequence()にて採番を行う。
                   カラムの桁数は、任意の桁数を設定可能となっている。
 ----------------- -----------------------------------------------------
 業務電文部         業務電文を格納するカラムを定義する。
                   電文の種類に応じて、業務電文の各項目に対するカラムを定義すれば良い。
 ----------------- -----------------------------------------------------
 共通項目部         各プロジェクトの方式に応じて必要なカラムを定義する。
                   たとえば、下記のカラムを定義することが想定される。
                   ・登録情報(ユーザID、タイムスタンプ、リクエストID、実行時ID)
                   ・更新情報(ユーザID、タイムスタンプ)
 ----------------- -----------------------------------------------------
 

本クラスは1電文を1レコードとして受信テーブルに保存する場合に利用できる。 1電文を複数レコードとして登録する場合や、複数テーブルに保存する場合は本クラスを継承し #handle(nablarch.fw.messaging.RequestMessage, nablarch.fw.ExecutionContext)や #insertMessageTable(String, Object)をオーバライドすること。

  • Constructor Details

    • AsyncMessageReceiveAction

      public AsyncMessageReceiveAction()
  • Method Details

    • handle

      public Result handle(RequestMessage inputData, ExecutionContext ctx)
      データリーダによって読み込まれた1件分の入力データに対する業務処理を実行する。

      ここで実行される業務処理は原子性を保証される。

      本処理では、メッセージキューから受信した電文オブジェクトを、RequestMessage.getRequestPath() より取得したリクエストIDに対応する受信テーブルに格納する。

      リクエストIDに対応した受信テーブルに格納する際には、下記オブジェクトや定義が必要になるため、 リクエストID単位に作成する必要がある。

      1. リクエストIDに対応したFormクラス
      2. 受信電文INSERT用のSQL文
      Specified by:
      handle in interface Handler<RequestMessage,Result>
      Specified by:
      handle in class BatchAction<RequestMessage>
      Parameters:
      inputData - 入力データ
      ctx - 実行コンテキスト
      Returns:
      処理結果情報オブジェクト
    • createReader

      public DataReader<RequestMessage> createReader(ExecutionContext ctx)
      このタスクの入力データを読み込むデータリーダを生成して返す。 本実装では、DataReaderの生成は行わない。 このため、メッセージキューからメッセージをリードするためのDataReaderの設定は、 コンポーネント設定ファイル側に行う必要がある。
      Specified by:
      createReader in interface DataReaderFactory<RequestMessage>
      Specified by:
      createReader in class BatchAction<RequestMessage>
      Parameters:
      ctx - 実行コンテキスト
      Returns:
      データリーダ
    • insertMessageTable

      protected void insertMessageTable(String requestId, Object form)
      業務用の受信テーブルに受信電文を登録する。
      Parameters:
      requestId - リクエストID
      form - 登録対象の電文を持ったオブジェクト
    • createForm

      protected Object createForm(String requestId, RequestMessage message)
      受信テーブルにINSERTを行うためのFormオブジェクトを生成する。

      生成するフォームクラスのクラス名は、パッケージ名:nablarch.fw.messaging.action.AsyncMessageReceiveActionSettings#getFormClassPackage() から取得したパッケージ名、クラス名:リクエストID + "Form"となる。

      また、Formクラスには下記引数を持つコンストラクタを定義し、受信メッセージの内容を保持すること。

    • 受信電文連番:String
    • 受信メッセージ:RequestMessage
    • Parameters:
      requestId - リクエストID
      message - リクエストメッセージ
      Returns:
      生成したFormオブジェクト
    • generateReceivedSequence

      protected String generateReceivedSequence()
      受信電文連番を採番する。

      受信電文連番採番時には、nablarch.fw.messaging.action.AsyncMessageReceiveActionSettings#getReceivedSequenceFormatter() で取得したフォーマッタを使用して、IDのフォーマットを行う。 採番対象を識別するためのIDは、nablarch.fw.messaging.action.AsyncMessageReceiveActionSettings#getTargetGenerateId()より取得する

      Returns:
      受信メッセージID
    • getSettings

      protected AsyncMessageReceiveActionSettings getSettings()
      本アクションを実行するために必要となる設定値を保持するオブジェクトを取得する。

      デフォルト動作では、リポジトリ(SystemRepository)から設定オブジェクトを取得する。

      Returns:
      設定オブジェクト