Class MultiThreadExecutionHandler

java.lang.Object
nablarch.fw.handler.MultiThreadExecutionHandler
All Implemented Interfaces:
Handler<Object,Result.MultiStatus>

public class MultiThreadExecutionHandler extends Object
後続ハンドラの処理を子スレッドを用いて実行するハンドラ。

本ハンドラ以降の処理は、新たに作成する子スレッド上で実行される。 これにより、後続スレッドの処理に対するタイムアウトの設定や、 停止要求(graceful-termination)を行うことが可能となる。

また、並行実行数を設定することにより、後続処理を複数のスレッド上で並行実行する ことができる。(デフォルトの並行実行数は1)

このハンドラでは、全てのスレッドで単一のデータリーダインスタンスを共有する。 従って、データリーダがアクセスするリソースに対する同期制御は各データリーダ側 で担保されている必要がある。

Author:
Iwauo Tajima
  • Constructor Details

    • MultiThreadExecutionHandler

      public MultiThreadExecutionHandler()
  • Method Details

    • handle

      public Result.MultiStatus handle(Object data, ExecutionContext context)
      入力データに対する処理を実行する。 この実装では、実行コンテキストのクローンを作成し、後続のハンドラ処理を並列実行する。

      後続処理のいずれかのスレッドにおいて例外が発生した場合は、 処理中の全スレッドに対して中止要求(interruption)をかけ、その完了を待つ。 スレッド停止後、各スレッドでの処理状況の詳細をログに出力した後、 元例外をラップした Result.InternalError を送出する。

      ただし、中止要求後、terminationTimeout値に指定された秒数を過ぎても完了しない スレッドがあった場合は、当該スレッドの停止を断念しリターンする。

      Specified by:
      handle in interface Handler<Object,Result.MultiStatus>
      Parameters:
      data - 入力データ
      context - 実行コンテキスト
      Returns:
      処理結果データ
    • setConcurrentNumber

      public MultiThreadExecutionHandler setConcurrentNumber(int concurrentNumber)
      並行実行スレッド数を設定する。

      デフォルト値は1である。

      Parameters:
      concurrentNumber - 並行実行スレッド数
      Returns:
      このハンドラ自体
    • setTerminationTimeout

      public MultiThreadExecutionHandler setTerminationTimeout(int terminationTimeout)
      処理停止要求のタイムアウト秒数を設定する。

      デフォルト値は 600秒 である。

      Parameters:
      terminationTimeout - 処理停止要求のタイムアウト秒数
      Returns:
      このハンドラ自体。
    • setCommitLogger

      public void setCommitLogger(CommitLogger commitLogger)
      コミットログ出力オブジェクトを設定する。
      Parameters:
      commitLogger - コミットログ出力オブジェクト