Package nablarch.fw.messaging.action
Class AsyncMessageReceiveAction
java.lang.Object
nablarch.core.db.support.DbAccessSupport
nablarch.fw.action.BatchActionBase<D>
nablarch.fw.action.BatchAction<RequestMessage>
nablarch.fw.messaging.action.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)をオーバライドすること。
-
Nested Class Summary
Nested classes/interfaces inherited from interface nablarch.fw.TransactionEventCallback
TransactionEventCallback.Provider<TData>
-
Field Summary
Fields inherited from interface nablarch.fw.TransactionEventCallback
REQUEST_DATA_REQUEST_SCOPE_KEY
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected Object
createForm
(String requestId, RequestMessage message) 受信テーブルにINSERTを行うためのFormオブジェクトを生成する。このタスクの入力データを読み込むデータリーダを生成して返す。protected String
受信電文連番を採番する。protected AsyncMessageReceiveActionSettings
本アクションを実行するために必要となる設定値を保持するオブジェクトを取得する。handle
(RequestMessage inputData, ExecutionContext ctx) データリーダによって読み込まれた1件分の入力データに対する業務処理を実行する。protected void
insertMessageTable
(String requestId, Object form) 業務用の受信テーブルに受信電文を登録する。Methods inherited from class nablarch.fw.action.BatchActionBase
error, errorInExecution, initialize, postExecution, preExecution, terminate, transactionAbnormalEnd, transactionFailure, transactionNormalEnd, transactionSuccess, writeErrorLog, writeFatalLog, writeLog
Methods inherited from class nablarch.core.db.support.DbAccessSupport
countByParameterizedSql, countByStatementSql, getParameterizedSqlStatement, getParameterizedSqlStatement, getSqlCStatement, getSqlPStatement, search
-
Constructor Details
-
AsyncMessageReceiveAction
public AsyncMessageReceiveAction()
-
-
Method Details
-
handle
データリーダによって読み込まれた1件分の入力データに対する業務処理を実行する。 ここで実行される業務処理は原子性を保証される。 本処理では、メッセージキューから受信した電文オブジェクトを、RequestMessage.getRequestPath()
より取得したリクエストIDに対応する受信テーブルに格納する。 リクエストIDに対応した受信テーブルに格納する際には、下記オブジェクトや定義が必要になるため、 リクエストID単位に作成する必要がある。- リクエストIDに対応したFormクラス
- 受信電文INSERT用のSQL文
- Specified by:
handle
in interfaceHandler<RequestMessage,
Result> - Specified by:
handle
in classBatchAction<RequestMessage>
- Parameters:
inputData
- 入力データctx
- 実行コンテキスト- Returns:
- 処理結果情報オブジェクト
-
createReader
このタスクの入力データを読み込むデータリーダを生成して返す。 本実装では、DataReader
の生成は行わない。 このため、メッセージキューからメッセージをリードするためのDataReader
の設定は、 コンポーネント設定ファイル側に行う必要がある。- Specified by:
createReader
in interfaceDataReaderFactory<RequestMessage>
- Specified by:
createReader
in classBatchAction<RequestMessage>
- Parameters:
ctx
- 実行コンテキスト- Returns:
- データリーダ
-
insertMessageTable
業務用の受信テーブルに受信電文を登録する。- Parameters:
requestId
- リクエストIDform
- 登録対象の電文を持ったオブジェクト
-
createForm
受信テーブルにINSERTを行うためのFormオブジェクトを生成する。 生成するフォームクラスのクラス名は、パッケージ名:nablarch.fw.messaging.action.AsyncMessageReceiveActionSettings#getFormClassPackage() から取得したパッケージ名、クラス名:リクエストID + "Form"となる。 また、Formクラスには下記引数を持つコンストラクタを定義し、受信メッセージの内容を保持すること。- 受信電文連番:
String
- 受信メッセージ:
RequestMessage
- Parameters:
requestId
- リクエストIDmessage
- リクエストメッセージ- Returns:
- 生成したFormオブジェクト
- 受信電文連番:
-
generateReceivedSequence
受信電文連番を採番する。 受信電文連番採番時には、nablarch.fw.messaging.action.AsyncMessageReceiveActionSettings#getReceivedSequenceFormatter() で取得したフォーマッタを使用して、IDのフォーマットを行う。 採番対象を識別するためのIDは、nablarch.fw.messaging.action.AsyncMessageReceiveActionSettings#getTargetGenerateId()より取得する- Returns:
- 受信メッセージID
-
getSettings
本アクションを実行するために必要となる設定値を保持するオブジェクトを取得する。 デフォルト動作では、リポジトリ(SystemRepository
)から設定オブジェクトを取得する。- Returns:
- 設定オブジェクト
-