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