Package nablarch.fw.messaging.action
Class AsyncMessageSendAction
- All Implemented Interfaces:
- DataReaderFactory<SqlRow>,- Handler<SqlRow,,- Result> - ExecutionHandlerCallback<CommandLine,,- Result> - TransactionEventCallback<SqlRow>
- Direct Known Subclasses:
- AsyncMessageSendActionForUt
MQ応答なし送信用の共通アクション。
 
 本クラスでは、送信用のテーブル(一時テーブル)から送信対象のデータを取得し、メッセージを送信する。
 
 送信対象のメッセージのリクエストIDは、本バッチの起動時の引数(起動パラメータ名:messageRequestId)として指定すること。
 
 送信対象のデータを抽出するSQL文は、テーブル単位に用意する必要がある。
 詳細は、
createStatement()を参照
 
 メッセージが正常に送信できた場合には、#transactionNormalEnd(nablarch.core.db.statement.SqlRow, nablarch.fw.ExecutionContext)にて
 対象データのステータスを処理済みに更新する。
 
 メッセージ送信時に例外が発生した場合には、#transactionAbnormalEnd(Throwable, nablarch.core.db.statement.SqlRow, nablarch.fw.ExecutionContext)にて
 対象データのステータスをエラーに更新する。- 
Nested Class SummaryNested classes/interfaces inherited from interface nablarch.fw.TransactionEventCallbackTransactionEventCallback.Provider<TData>
- 
Field SummaryFields inherited from interface nablarch.fw.TransactionEventCallbackREQUEST_DATA_REQUEST_SCOPE_KEY
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionprotected DataRecordFormatterデータ部のフォーマッタ生成する。protected ObjectcreateFormInstance(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 StringSQLリソース名称を取得する。handle(SqlRow inputData, ExecutionContext ctx) 入力データからヘッダ部及び業務データ部からなるメッセージオブジェクトを生成し、 送信処理(キューへのPUT)を行う。protected voidinitialize(CommandLine command, ExecutionContext context) 初期処理を行う。voidtransactionAbnormalEnd(Throwable e, SqlRow inputData, ExecutionContext ctx) インプットテーブルの対象レコードのステータスをエラーに更新する。 これにより、エラーレコードを再度送信することを防止する事ができる。voidtransactionNormalEnd(SqlRow inputData, ExecutionContext ctx) インプットテーブルの対象レコードのステータスを処理済みに更新する。 これにより、次回対象データ抽出時に処理済みのレコードは対象外となり、 2重送信を防止する事が出来る。protected voidupdateStatus(SqlRow inputData, String sqlId) ステータスを更新する。Methods inherited from class nablarch.fw.action.BatchActionBaseerror, errorInExecution, postExecution, preExecution, terminate, transactionFailure, transactionSuccess, writeErrorLog, writeFatalLog, writeLogMethods inherited from class nablarch.core.db.support.DbAccessSupportcountByParameterizedSql, countByStatementSql, getParameterizedSqlStatement, getParameterizedSqlStatement, getSqlCStatement, getSqlPStatement, search
- 
Constructor Details- 
AsyncMessageSendActionpublic AsyncMessageSendAction()
 
- 
- 
Method Details- 
initialize初期処理を行う。 起動引数から送信対象のメッセージのリクエストIDを取得し、保持する。- Overrides:
- initializein class- BatchActionBase<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:
- transactionNormalEndin interface- TransactionEventCallback<SqlRow>
- Overrides:
- transactionNormalEndin class- BatchActionBase<SqlRow>
- Parameters:
- inputData- 入力データ
- ctx- 実行コンテキスト
 
- 
transactionAbnormalEndインプットテーブルの対象レコードのステータスをエラーに更新する。 これにより、エラーレコードを再度送信することを防止する事ができる。 (エラーレコードは、何度送信してもエラーになることが考えられるため ステータスをエラーに変更する必要がある。) ステータスを更新するSQL文は、getSqlResource()で取得した SQLリソース内に記述されたSQL_ID=UPDATE_ABNORMAL_ENDを使用する。- Specified by:
- transactionAbnormalEndin interface- TransactionEventCallback<SqlRow>
- Overrides:
- transactionAbnormalEndin class- BatchActionBase<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:
- createReaderin interface- DataReaderFactory<SqlRow>
- Specified by:
- createReaderin class- BatchAction<SqlRow>
- Parameters:
- ctx- 実行コンテキスト
- Returns:
- データリーダ
 
- 
createStatementインプットデータを抽出するためのSqlPStatementを生成する。SqlPStatementを生成するためのSQLは、下記ルールに従い取得する。
- SQLリソースは、
getSqlResource()の実装に準拠する
- SQL_IDは、SELECT_SEND_DATA固定
- Returns:
- SqlPStatement
 
- SQLリソースは、
- 
getSqlResourceSQLリソース名称を取得する。 返却する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クラスのインスタンス
 
 
-