Class BatchAction<D>

Type Parameters:
D - 業務処理が処理する入力データの型
All Implemented Interfaces:
DataReaderFactory<D>, Handler<D,Result>, ExecutionHandlerCallback<CommandLine,Result>, TransactionEventCallback<D>
Direct Known Subclasses:
AsyncMessageReceiveAction, AsyncMessageSendAction, MailSender, NoInputDataBatchAction

@Published public abstract class BatchAction<D> extends BatchActionBase<D> implements Handler<D,Result>, DataReaderFactory<D>
標準的なバッチ処理における業務処理の基本実装クラス。

バッチ処理方式では、以下のインタフェースを実装する必要がある。

 1. Handler or doXXXX() メソッド (Method-Binding使用時)
 2. DataReaderFactory(必須)
 3. ExecutionHandlerCallback(任意)
 
以下の擬似コードは、本クラスの各メソッドが フレームワークによって呼び出される順序を表したものである。
 CommandLine      command;   // バッチ起動時のコマンドライン
 ExecutionContext ctx;       // 実行コンテキスト
 
 initialize(command, ctx);                       // バッチ処理開始前に一度だけ呼ばれる。
 DataReader reader = createReader(ctx);   // バッチ処理開始前に一度だけ呼ばれる。
 
 Result result = null;
 
 try {
     while(reader.hasNext()) {               // データリーダ上のレコードが終端に達するまで繰り返す。
 
         TData data = reader.read(ctx);      // 業務トランザクション1件分の入力データを読み込む。
 
        try {
             result = handle(data, ctx);     // 入力データ1件毎に繰り返し呼ばれる。
             commit();                       // 業務トランザクションをコミット
             transactionSuccess(data, ctx);  // 業務トランザクションがコミットされた後で呼ばれる。
 
         } catch(e) {
             rollback();                     // 業務トランザクションをロールバック
             transactionFailure(data, ctx);  // 業務トランザクションがロールバックされた後で呼ばれる。
             throw e;
         }
     }
 
 } catch(e) {
     error(e, ctx);                           // バッチがエラー終了した場合に、一度だけ呼ばれる。
 
 } finally {
     terminate(result, ctx)                   // バッチが終了した後、一度だけ呼ばれる。
 }
 
また、DBアクセス処理に関するテンプレートメソッドを実装した DbAccessSupport を本クラスが継承しているBatchActionBaseが実装しているため、簡便に業務処理を実装することができる。
Author:
Iwauo Tajima
  • Constructor Details

    • BatchAction

      @Published public BatchAction()
      BatchActionを生成する。
  • Method Details

    • handle

      public abstract Result handle(D inputData, ExecutionContext ctx)
      データリーダによって読み込まれた1件分の入力データに対する業務処理を実行する。

      ここで実行される業務処理は原子性を保証される。
      Specified by:
      handle in interface Handler<D,Result>
      Parameters:
      ctx - 実行コンテキスト
      inputData - 入力データ
      Returns:
      処理結果情報オブジェクト
    • createReader

      public abstract DataReader<D> createReader(ExecutionContext ctx)
      このタスクの入力データを読み込むデータリーダを生成して返す。
      Specified by:
      createReader in interface DataReaderFactory<D>
      Parameters:
      ctx - 実行コンテキスト
      Returns:
      データリーダ