Package nablarch.fw.handler
Class MultiThreadExecutionHandler
java.lang.Object
nablarch.fw.handler.MultiThreadExecutionHandler
- All Implemented Interfaces:
Handler<Object,
Result.MultiStatus>
後続ハンドラの処理を子スレッドを用いて実行するハンドラ。
本ハンドラ以降の処理は、新たに作成する子スレッド上で実行される。
これにより、後続スレッドの処理に対するタイムアウトの設定や、
停止要求(graceful-termination)を行うことが可能となる。
また、並行実行数を設定することにより、後続処理を複数のスレッド上で並行実行する
ことができる。(デフォルトの並行実行数は1)
このハンドラでは、全てのスレッドで単一のデータリーダインスタンスを共有する。
従って、データリーダがアクセスするリソースに対する同期制御は各データリーダ側
で担保されている必要がある。
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionhandle
(Object data, ExecutionContext context) 入力データに対する処理を実行する。void
setCommitLogger
(CommitLogger commitLogger) コミットログ出力オブジェクトを設定する。setConcurrentNumber
(int concurrentNumber) 並行実行スレッド数を設定する。setTerminationTimeout
(int terminationTimeout) 処理停止要求のタイムアウト秒数を設定する。
-
Constructor Details
-
MultiThreadExecutionHandler
public MultiThreadExecutionHandler()
-
-
Method Details
-
handle
入力データに対する処理を実行する。 この実装では、実行コンテキストのクローンを作成し、後続のハンドラ処理を並列実行する。 後続処理のいずれかのスレッドにおいて例外が発生した場合は、 処理中の全スレッドに対して中止要求(interruption)をかけ、その完了を待つ。 スレッド停止後、各スレッドでの処理状況の詳細をログに出力した後、 元例外をラップした Result.InternalError を送出する。 ただし、中止要求後、terminationTimeout値に指定された秒数を過ぎても完了しない スレッドがあった場合は、当該スレッドの停止を断念しリターンする。- Specified by:
handle
in interfaceHandler<Object,
Result.MultiStatus> - Parameters:
data
- 入力データcontext
- 実行コンテキスト- Returns:
- 処理結果データ
-
setConcurrentNumber
並行実行スレッド数を設定する。 デフォルト値は1である。- Parameters:
concurrentNumber
- 並行実行スレッド数- Returns:
- このハンドラ自体
-
setTerminationTimeout
処理停止要求のタイムアウト秒数を設定する。 デフォルト値は 600秒 である。- Parameters:
terminationTimeout
- 処理停止要求のタイムアウト秒数- Returns:
- このハンドラ自体。
-
setCommitLogger
コミットログ出力オブジェクトを設定する。- Parameters:
commitLogger
- コミットログ出力オブジェクト
-