Package nablarch.fw.messaging.action
Class AsyncMessageSendAction
- All Implemented Interfaces:
DataReaderFactory<SqlRow>
,Handler<SqlRow,
,Result> ExecutionHandlerCallback<CommandLine,
,Result> TransactionEventCallback<SqlRow>
MQ応答なし送信用の共通アクション。
本クラスでは、送信用のテーブル(一時テーブル)から送信対象のデータを取得し、メッセージを送信する。
送信対象のメッセージのリクエストIDは、本バッチの起動時の引数(起動パラメータ名:messageRequestId)として指定すること。
送信対象のデータを抽出するSQL文は、テーブル単位に用意する必要がある。
詳細は、
createStatement()
を参照
メッセージが正常に送信できた場合には、#transactionNormalEnd(nablarch.core.db.statement.SqlRow, nablarch.fw.ExecutionContext)にて
対象データのステータスを処理済みに更新する。
メッセージ送信時に例外が発生した場合には、#transactionAbnormalEnd(Throwable, nablarch.core.db.statement.SqlRow, nablarch.fw.ExecutionContext)にて
対象データのステータスをエラーに更新する。- Author:
- hisaaki sioiri
-
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 DataRecordFormatter
データ部のフォーマッタ生成する。protected Object
createFormInstance
(Map<String, ?> inputData) 送信用一時テーブルを更新するためのFormオブジェクトを生成する。createHeaderRecord
(SqlRow inputData) ヘッダデータを生成する。protected DataRecordFormatter
ヘッダ部のフォーマットを生成する。送信対象のデータを抽出するためのDatabaseRecordReader
を生成する。DatabaseRecordReader
生成時に指定するSqlPStatement
は、 #createStatement()により生成する。protected SqlPStatement
インプットデータを抽出するためのSqlPStatement
を生成する。protected String
フォーマット定義ファイルの配置ディレクトリを示す論理名を取得する。protected String
ヘッダ部のフォーマット定義ファイル名を取得する。protected String
送信キュー名を取得する。protected AsyncMessageSendActionSettings
本アクションを実行するために必要となる設定値を保持するオブジェクトを取得する。protected String
SQLリソース名称を取得する。handle
(SqlRow inputData, ExecutionContext ctx) 入力データからヘッダ部及び業務データ部からなるメッセージオブジェクトを生成し、 送信処理(キューへのPUT)を行う。protected void
initialize
(CommandLine command, ExecutionContext context) 初期処理を行う。void
transactionAbnormalEnd
(Throwable e, SqlRow inputData, ExecutionContext ctx) インプットテーブルの対象レコードのステータスをエラーに更新する。 これにより、エラーレコードを再度送信することを防止する事ができる。void
transactionNormalEnd
(SqlRow inputData, ExecutionContext ctx) インプットテーブルの対象レコードのステータスを処理済みに更新する。 これにより、次回対象データ抽出時に処理済みのレコードは対象外となり、 2重送信を防止する事が出来る。protected void
updateStatus
(SqlRow inputData, String sqlId) ステータスを更新する。Methods inherited from class nablarch.fw.action.BatchActionBase
error, errorInExecution, postExecution, preExecution, terminate, transactionFailure, transactionSuccess, writeErrorLog, writeFatalLog, writeLog
Methods inherited from class nablarch.core.db.support.DbAccessSupport
countByParameterizedSql, countByStatementSql, getParameterizedSqlStatement, getParameterizedSqlStatement, getSqlCStatement, getSqlPStatement, search
-
Constructor Details
-
AsyncMessageSendAction
public AsyncMessageSendAction()
-
-
Method Details
-
initialize
初期処理を行う。 起動引数から送信対象のメッセージのリクエストIDを取得し、保持する。- Overrides:
initialize
in classBatchActionBase<SqlRow>
- Parameters:
command
- 起動コマンドラインcontext
- 実行コンテキスト
-
handle
入力データからヘッダ部及び業務データ部からなるメッセージオブジェクトを生成し、 送信処理(キューへのPUT)を行う。 処理詳細は、以下のとおり。- ヘッダ部は、
createHeaderRecord(nablarch.core.db.statement.SqlRow)
で生成する。 - 業務データ部は、インプットデータ(本メソッドの引数)をそのまま使用する。
- 送信先のキューは、
getQueueName()
から取得する。
- ヘッダ部は、
-
transactionNormalEnd
インプットテーブルの対象レコードのステータスを処理済みに更新する。 これにより、次回対象データ抽出時に処理済みのレコードは対象外となり、 2重送信を防止する事が出来る。 ステータスを更新するSQL文は、getSqlResource()
で取得した SQLリソース内に記述されたSQL_ID=UPDATE_NORMAL_ENDを使用する。- Specified by:
transactionNormalEnd
in interfaceTransactionEventCallback<SqlRow>
- Overrides:
transactionNormalEnd
in classBatchActionBase<SqlRow>
- Parameters:
inputData
- 入力データctx
- 実行コンテキスト
-
transactionAbnormalEnd
インプットテーブルの対象レコードのステータスをエラーに更新する。 これにより、エラーレコードを再度送信することを防止する事ができる。 (エラーレコードは、何度送信してもエラーになることが考えられるため ステータスをエラーに変更する必要がある。) ステータスを更新するSQL文は、getSqlResource()
で取得した SQLリソース内に記述されたSQL_ID=UPDATE_ABNORMAL_ENDを使用する。- Specified by:
transactionAbnormalEnd
in interfaceTransactionEventCallback<SqlRow>
- Overrides:
transactionAbnormalEnd
in classBatchActionBase<SqlRow>
- Parameters:
e
- 発生したエラーinputData
- 入力データctx
- 実行コンテキスト
-
updateStatus
ステータスを更新する。 指定されたインプットデータ、SQL_IDを元にステータスを更新する。 ステータスを更新するためのFormクラスは、nablarch.fw.messaging.action.AsyncMessageSendActionSettings#getFormClassName() から取得したFormクラスを使用して行う。- Parameters:
inputData
- インプットデータsqlId
- SQL_ID
-
createReader
送信対象のデータを抽出するためのDatabaseRecordReader
を生成する。DatabaseRecordReader
生成時に指定するSqlPStatement
は、 #createStatement()により生成する。- Specified by:
createReader
in interfaceDataReaderFactory<SqlRow>
- Specified by:
createReader
in classBatchAction<SqlRow>
- Parameters:
ctx
- 実行コンテキスト- Returns:
- データリーダ
-
createStatement
インプットデータを抽出するためのSqlPStatement
を生成する。SqlPStatement
を生成するためのSQLは、下記ルールに従い取得する。- SQLリソースは、
getSqlResource()
の実装に準拠する- SQL_IDは、SELECT_SEND_DATA固定
- Returns:
SqlPStatement
- SQLリソースは、
-
getSqlResource
SQLリソース名称を取得する。 返却するSQLリソース名称は、「nablarch.fw.messaging.action.AsyncMessageSendActionSettings#getSqlFilePackage() + "." + バッチ起動時に指定した送信メッセージのメッセージリクエストID」となる。- Returns:
- SQLリソース名称
- See Also:
-
getSettings
本アクションを実行するために必要となる設定値を保持するオブジェクトを取得する。 デフォルト動作では、リポジトリ(SystemRepository
)から設定オブジェクトを取得する。- Returns:
- 設定オブジェクト
-
createHeaderRecordFormatter
ヘッダ部のフォーマットを生成する。 ヘッダ部を表すフォーマット定義ファイル名は、getHeaderFormatName()
より取得する。- Returns:
- 生成したフォーマッタ
-
getHeaderFormatName
ヘッダ部のフォーマット定義ファイル名を取得する。 ヘッダ部のフォーマット定義ファイル名は、nablarch.fw.messaging.action.AsyncMessageSendActionSettings#getHeaderFormatName() から取得した値となる。- Returns:
- フォーマット定義ファイル名
- See Also:
-
createHeaderRecord
ヘッダデータを生成する。 ヘッダ部に設定する項目は以下のとおり。- リクエストIDを設定するフィールド(項目名:requestId)があること。 リクエストID部には、バッチ起動時に指定された送信メッセージのメッセージIDを設定する。
- リクエストID以外の項目は、任意の項目を設定することが可能である。
設定する項目は、nablarch.fw.messaging.action.AsyncMessageSendActionSettings#getHeaderItemList()から取得した項目となり、
設定する値は
handle(nablarch.core.db.statement.SqlRow, nablarch.fw.ExecutionContext)
のインプットデータから取得する。
- Parameters:
inputData
- 入力データ- Returns:
- 生成したヘッダ情報
-
createDataRecordFormatter
データ部のフォーマッタ生成する。- Returns:
- 生成したフォーマッタ
-
getQueueName
送信キュー名を取得する。- Returns:
- 送信キュー名
-
getFormatDir
フォーマット定義ファイルの配置ディレクトリを示す論理名を取得する。- Returns:
- フォーマット定義ファイルの配置ディレクトリ(論理名)
-
createFormInstance
送信用一時テーブルを更新するためのFormオブジェクトを生成する。- Parameters:
inputData
- Formインスタンスを生成するためのインプットデータ- Returns:
- 生成したFormクラスのインスタンス
-