Class ResumeDataReader<TData>

java.lang.Object
nablarch.fw.reader.ResumeDataReader<TData>
Type Parameters:
TData - このクラスが読み込んだデータの型
All Implemented Interfaces:
DataReader<TData>

public class ResumeDataReader<TData> extends Object implements DataReader<TData>
ファイルを読み込むデータリーダをラップして、レジューム機能を追加するデータリーダ。

本クラスは、ラップしたデータリーダのreadメソッドの実行回数を、 正常に処理できたポイントとして実行管理テーブルに保存する。
正常に処理できたポイントは業務処理がコミットされるタイミングで保存される。 業務処理が失敗しトランザクションがロールバックされる場合、正常に処理できたポイントの保存は行われない。
障害発生時などに処理を再実行する場合、本クラスは正常に処理できたポイントまでのファイル読み込み(業務処理)をスキップし、 再開ポイント(正常に処理できたポイントの次のポイント)からファイル読み込みを再開する。
そのため、再開ポイント以前のデータに対してパッチを当てた際は、正常に処理できたポイントを0クリアする必要がある。
なお、FileBatchActionを継承したバッチ業務アクションを作成する場合は、 FileBatchActionがデフォルトでValidatableFileDataReaderをラップしたResumeDataReaderを生成するので、 アプリケーションプログラマが上記2つのオブジェクトを生成するコードを実装する必要はない。

Author:
Masato Inoue
See Also:
  • Constructor Details

    • ResumeDataReader

      public ResumeDataReader()
  • Method Details

    • read

      public TData read(ExecutionContext ctx)
      レジューム機能を追加するデータリーダからデータを読み込む。

      データを読み込んだ回数を正常に処理できたポイントとして実行管理テーブルに保存し、 処理再開時にはその次のポイントから読み込みを再開する。
      トランザクションループ制御ハンドラの設定により一定件数ごとにコミットを行なっている場合は、 コミット前の最後の処理で正常に処理できたポイントを実行管理テーブルに保存する。
      次に読み込むデータが存在しない場合はnullを返す。

      Specified by:
      read in interface DataReader<TData>
      Parameters:
      ctx - 実行コンテキスト
      Returns:
      入力データオブジェクト
    • hasNext

      public boolean hasNext(ExecutionContext ctx)
      次に読み込むデータが存在するかどうかを返却する。
      Specified by:
      hasNext in interface DataReader<TData>
      Parameters:
      ctx - 実行コンテキスト
      Returns:
      次に読み込むデータが存在する場合はtrue
    • close

      public void close(ExecutionContext ctx)
      このリーダの利用を停止し、内部的に保持している各種リソースを解放する。
      Specified by:
      close in interface DataReader<TData>
      Parameters:
      ctx - 実行コンテキスト
    • readToResumePoint

      protected void readToResumePoint(ExecutionContext ctx)
      レジューム機能が有効になっている場合、正常に処理できたポイントまでのレジュームを行う。
      Parameters:
      ctx - 実行コンテキスト
      Throws:
      IllegalStateException - 次に読み込むデータが存在しない場合
    • loadResumePoint

      protected int loadResumePoint()
      正常に処理できたポイントを取得する。

      レジューム機能が無効になっている場合は0を返す。

      Returns:
      正常に処理できたポイント
    • saveResumePoint

      protected void saveResumePoint()
      正常に処理できたポイントを保存する。

      レジューム機能が無効になっている場合は何もしない。

    • setSourceReader

      public ResumeDataReader<TData> setSourceReader(DataReader<TData> sourceReader)
      レジューム機能を追加するデータリーダを設定する。
      Parameters:
      sourceReader - レジューム機能を追加するデータリーダ
      Returns:
      このオブジェクト自体