Class LoopHandler

All Implemented Interfaces:
Handler<Object,Result>

public class LoopHandler extends TransactionEventCallback.Provider<Object> implements Handler<Object,Result>
ループ制御ハンドラークラス。

本ハンドラは、アプリケーションが処理すべきデータが存在する間、後続のハンドラに対して繰り返し処理を委譲する。 処理すべきデータが存在するかは、ExecutionContext.hasNextData()により判断する。

また、本ハンドラではトランザクション制御もあわせて行う。 トランザクションは、指定間隔(setCommitInterval(int)毎にコミット処理を行う。 後続ハンドラから例外が送出された場合には、未コミットのトランザクションを全てロールバックし、例外を再送出する。

本ハンドラの事前ハンドラとして、DbConnectionManagementHandlerを登録すること。

Author:
Hisaaki Sioiri
See Also:
  • Constructor Details

    • LoopHandler

      public LoopHandler()
  • Method Details

    • handle

      public Result handle(Object data, ExecutionContext context)
      入力データに対する処理を実行する。 この実装では、特定の条件を満たすまで、以降のハンドラキューの内容を 繰り返し処理する。
      Specified by:
      handle in interface Handler<Object,Result>
      Parameters:
      data - 入力データ
      context - 実行コンテキスト
      Returns:
      処理結果データ
    • shouldStop

      public boolean shouldStop(ExecutionContext context)
      現在の処理終了後にループを止める場合にtrueを返す。

      デフォルトの実装では、実行コンテキスト上のデータリーダのデータが 空になるまで繰り返し処理を行う。

      これと異なる条件でループを停止させたい場合は、本メソッドをオーバライドすること。

      Parameters:
      context - 実行コンテキスト
      Returns:
      ループを止める場合はtrue
    • setTransactionFactory

      public LoopHandler setTransactionFactory(TransactionFactory transactionFactory)
      トランザクションオブジェクトを取得するためのファクトリを設定する。
      Parameters:
      transactionFactory - トランザクションオブジェクトを取得するためのファクトリ
      Returns:
      このハンドラ自体
    • setTransactionName

      public void setTransactionName(String transactionName)
      このハンドラが管理するトランザクションの、スレッドコンテキスト上での登録名を設定する。
       デフォルトでは既定のトランザクション名
       (TransactionContext.DEFAULT_TRANSACTION_CONTEXT_KEY)を使用する。
      
       
      Parameters:
      transactionName - データベース接続のスレッドコンテキスト上の登録名
    • setCommitInterval

      public LoopHandler setCommitInterval(int commitInterval)
      コミット間隔を設定する。

      コミット間隔を指定した場合、指定した間隔でコミットが行われる。 なお、0以下の値を設定した場合や、設定を省略した場合のコミット間隔は1となる。

      Parameters:
      commitInterval - コミット間隔
      Returns:
      このハンドラ自体
    • isAboutToCommit

      public static final boolean isAboutToCommit(ExecutionContext ctx)
      現在のリクエストループの業務アクション実行後にLoopHandlerによるコミットが行われるか否か。 本メソッドは DataReadHandler よりも後ろで呼び出された場合のみ正しい結果が得られる。
      Parameters:
      ctx - 実行コンテキスト
      Returns:
      業務アクション実行後にコミットが行われる場合は true