@Published(tag="architect") public class AsyncMessageReceiveAction extends BatchAction<RequestMessage>
RequestMessage.getRequestPath()
)を元に、
受信テーブルに電文を保存する。
受信テーブルの構造は、必ず下記構造にすること。
----------------- ----------------------------------------------------- 受信電文連番 主キー 受信した電文(メッセージ)を一意に識別するためのIDを格納するカラム。 本カラムに設定する値は、#generateReceivedSequence()にて採番を行う。 カラムの桁数は、任意の桁数を設定可能となっている。 ----------------- ----------------------------------------------------- 業務電文部 業務電文を格納するカラムを定義する。 電文の種類に応じて、業務電文の各項目に対するカラムを定義すれば良い。 ----------------- ----------------------------------------------------- 共通項目部 各プロジェクトの方式に応じて必要なカラムを定義する。 たとえば、下記のカラムを定義することが想定される。 ・登録情報(ユーザID、タイムスタンプ、リクエストID、実行時ID) ・更新情報(ユーザID、タイムスタンプ) ----------------- -----------------------------------------------------本クラスは1電文を1レコードとして受信テーブルに保存する場合に利用できる。 1電文を複数レコードとして登録する場合や、複数テーブルに保存する場合は本クラスを継承し #handle(nablarch.fw.messaging.RequestMessage, nablarch.fw.ExecutionContext)や #insertMessageTable(String, Object)をオーバライドすること。
TransactionEventCallback.Provider<TData>
REQUEST_DATA_REQUEST_SCOPE_KEY
Constructor and Description |
---|
AsyncMessageReceiveAction() |
Modifier and Type | Method and Description |
---|---|
protected java.lang.Object |
createForm(java.lang.String requestId,
RequestMessage message)
受信テーブルにINSERTを行うためのFormオブジェクトを生成する。
生成するフォームクラスのクラス名は、パッケージ名:nablarch.fw.messaging.action.AsyncMessageReceiveActionSettings#getFormClassPackage()
から取得したパッケージ名、クラス名:リクエストID + "Form"となる。
また、Formクラスには下記引数を持つコンストラクタを定義し、受信メッセージの内容を保持すること。
String
受信メッセージ:RequestMessage
|
DataReader<RequestMessage> |
createReader(ExecutionContext ctx)
このタスクの入力データを読み込むデータリーダを生成して返す。
|
protected java.lang.String |
generateReceivedSequence()
受信電文連番を採番する。
受信電文連番採番時には、nablarch.fw.messaging.action.AsyncMessageReceiveActionSettings#getReceivedSequenceFormatter()
で取得したフォーマッタを使用して、IDのフォーマットを行う。
採番対象を識別するためのIDは、nablarch.fw.messaging.action.AsyncMessageReceiveActionSettings#getTargetGenerateId()より取得する
|
protected AsyncMessageReceiveActionSettings |
getSettings()
本アクションを実行するために必要となる設定値を保持するオブジェクトを取得する。
デフォルト動作では、リポジトリ(
SystemRepository )から設定オブジェクトを取得する。 |
Result |
handle(RequestMessage inputData,
ExecutionContext ctx)
データリーダによって読み込まれた1件分の入力データに対する業務処理を実行する。
|
protected void |
insertMessageTable(java.lang.String requestId,
java.lang.Object form)
業務用の受信テーブルに受信電文を登録する。
|
error, errorInExecution, initialize, postExecution, preExecution, terminate, transactionAbnormalEnd, transactionFailure, transactionNormalEnd, transactionSuccess, writeErrorLog, writeFatalLog, writeLog
countByParameterizedSql, countByStatementSql, getParameterizedSqlStatement, getParameterizedSqlStatement, getSqlCStatement, getSqlPStatement, search
public Result handle(RequestMessage inputData, ExecutionContext ctx)
RequestMessage.getRequestPath()
より取得したリクエストIDに対応する受信テーブルに格納する。
リクエストIDに対応した受信テーブルに格納する際には、下記オブジェクトや定義が必要になるため、
リクエストID単位に作成する必要がある。
handle
in interface Handler<RequestMessage,Result>
handle
in class BatchAction<RequestMessage>
inputData
- 入力データctx
- 実行コンテキストpublic DataReader<RequestMessage> createReader(ExecutionContext ctx)
DataReader
の生成は行わない。
このため、メッセージキューからメッセージをリードするためのDataReader
の設定は、
コンポーネント設定ファイル側に行う必要がある。createReader
in interface DataReaderFactory<RequestMessage>
createReader
in class BatchAction<RequestMessage>
ctx
- 実行コンテキストprotected void insertMessageTable(java.lang.String requestId, java.lang.Object form)
requestId
- リクエストIDform
- 登録対象の電文を持ったオブジェクトprotected java.lang.Object createForm(java.lang.String requestId, RequestMessage message)
String
RequestMessage
requestId
- リクエストIDmessage
- リクエストメッセージprotected java.lang.String generateReceivedSequence()
protected AsyncMessageReceiveActionSettings getSettings()
SystemRepository
)から設定オブジェクトを取得する。