目次 > 第2章 バッチフレームワークチュートリアル > 2.3 ファイルアクセス機能を用いた単純なジョブ > 2.3.4 ビジネスロジックの実装

2.3.4 ビジネスロジックの実装

本節では、ビジネスロジックの実装方法について説明する。

処理内容

2.3.4 ビジネスロジックの実装

  1. 入力パラメータの“取引日”とジョブコンテキストの“運用日付”を比較する。
  2. “取引日”が“運用日付”以降である場合、メッセージをログに出力する。
  3. “入金金額”が10,000以上であるか比較し、10,000以上である場合は以下の処理を行う。
    1. 10,000以上である場合“顧客情報出力ファイル”に“顧客ID”、“入金金額”、“取引日”を出力する。
    2. 処理件数をカウントアップする。
備考

“顧客情報出力ファイル”は“kokyaku.csv”として“terasoluna-batch-blank\outputfile”内に作成される。
出力先フォルダが存在しない場合は「2.1 チュートリアル学習環境の整備 (8)ファイルの出力先を作成」を参照し、 作成しておくこと。

設計情報例

ジョブ主処理定義例

ジョブ主処理

外部I/F定義例

外部I/F定義2

手順

1. “JB0002Data.java”を編集

2.3.3 対象データ取得処理の準備」の手順1で作成した“JB0002Data”に出力におけるファイル定義情報を追加する。ファイル定義情報は次の通り。

  • カラムの囲み文字はダブルクォーテーションを使用する
  • 同名のファイルが存在する場合は既存のファイルを削除し、新規ファイルを作成する
  • “顧客ID”、“入金金額”、“取引日”を顧客情報出力ファイルに出力する
  • “取引日”は“yyyy/MM/dd”形式で出力する

以下のように“FileFormat”に定義を追加する。

@FileFormat(overWriteFlg=true, encloseChar='\"')
public class JB0002Data {

ファイル全体に関する定義情報は“FileFormat”アノテーションで定義する。
本項で使用する設定項目を以下に示す。

  • “FileFormat”アノテーションの設定項目
    • overWriteFlg
      • ファイルの上書きフラグを設定する。
    • encloseChar
      • 囲み文字を設定する。

次に、出力する属性に“OutputFileColumn”アノテーションを定義する。“取引日”には“columnFormat”を定義し、出力形式を指定する。

/**
 * 顧客ID
 */
@InputFileColumn(columnIndex = 2, bytes = 3)
@OutputFileColumn(columnIndex = 0)
private String kokyakuid = null;

/**
 * 入金金額
 */
@InputFileColumn(columnIndex = 3)
@OutputFileColumn(columnIndex = 1)
private int nyukin = 0;

/**
 * 取引日
 */
@InputFileColumn(columnIndex = 4, bytes = 10, columnFormat = "yyyy-MM-dd")
@OutputFileColumn(columnIndex = 2, columnFormat = "yyyy/MM/dd")
private Date torihikibi = null;

出力属性に関する定義情報は“OutputFileColumn”アノテーションで定義する。
本項で使用する設定項目を以下に示す。

  • “OutputFileColumn”アノテーションの設定項目
    • columnIndex
      • 必須項目。行オブジェクトの属性を何番目のカラムに出力するのかを設定する。
    • columnFormat
      • Date型やBigDecimal型に対する出力フォーマットを設定する。

2. “FileBLogic.java”を作成

ビジネスロジッククラスを作成する。必ず、“jp.terasoluna.fw.batch.openapi.BLogic”インタフェースを実装し、型パラメータを定義すること。
ここでは、型パラメータに「2.3.3 対象データ取得処理の準備」の手順1で作成した“JB0002Data”と、「2.3.2 ジョブコンテキストの実装」の手順1で作成した“JB0002JobContext”を指定する。

  1. パッケージエクスプローラビューで、“sources”フォルダーを右クリックする。
  2. 「新規」→「クラス」を選択し、パッケージに“jp.terasoluna.batch.tutorial.uc0001.jb0002”、名前に“FileBLogic”を入力し、「終了」を押下する。
  3. “FileBLogic.java”を以下のように作成する。
/* 
 * Copyright (c) 2007 NTT DATA Corporation
 * 
 */
package jp.terasoluna.batch.tutorial.uc0001.jb0002;

import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import jp.terasoluna.batch.tutorial.uc0001.JB0002JobContext;
import jp.terasoluna.batch.tutorial.uc0001.JB0002Data;
import jp.terasoluna.fw.batch.messages.MessageAccessor;
import jp.terasoluna.fw.batch.openapi.BLogic;
import jp.terasoluna.fw.batch.openapi.BLogicResult;
import jp.terasoluna.fw.batch.openapi.ReturnCode;
import jp.terasoluna.fw.file.dao.FileLineWriter;

/**
 * ビジネスロジッククラス。
 */
public class FileBLogic implements BLogic<JB0002Data, JB0002JobContext> {


    /**
     * ログクラス。
     */
    private static final Log log = LogFactory.getLog(FileBLogic.class);
    
    /**
     * メッセージ取得クラス。
     * Springによりインスタンス生成され設定される。
     */
    private MessageAccessor messageAccessor = null;
 
  
    /**
     * ファイル出力用行ライタクラス。
     * Springによりインスタンス生成され設定される。
     */
    private FileLineWriter<JB0002Data> fileLineWriter = null;
    
    /**
     * ビジネスロジックを実行する。
     * @param nyukinData 入力パラメータ
     * @param jobContext ジョブコンテキスト
     */
    public BLogicResult execute(JB0002Data nyukinData, JB0002JobContext jobContext) {

        //取引日と運用日付の比較
        Date torihikibi = nyukinData.getTorihikibi();
        Date unyohiduke = jobContext.getUnyohiduke();
    
        if (!torihikibi.before(unyohiduke)) {
            
            //取引日 >= 運用日付 ならばメッセージを取得しログに出力する。
            String[] args = {nyukinData.getKokyakuid()};
            String message = messageAccessor.getMessage("msg.SampleMsg",args);
            
            log.warn(message);
        }
    
    
        //入金金額が10,000以上のデータをファイルに出力
        int nyukin = nyukinData.getNyukin();
        if (nyukin >= 10000) {
            //ファイルへ書き込み
            fileLineWriter.printDataLine(nyukinData);
        
            //処理件数をカウントアップ
            jobContext.incrementCount();
        }
        
        //ビジネスロジック処理結果オブジェクトを返却する
        BLogicResult result = new BLogicResult(ReturnCode.NORMAL_CONTINUE);
        return result;
    }
    
    /**
     * メッセージ取得クラスを設定する。
     * @param msgAcc メッセージ取得クラス
     */
    public void setMessageAccessor(MessageAccessor msgAcc) {
        this.messageAccessor = msgAcc;
    }
    
    /**
     * ファイル出力用行ライタクラスを設定する。
     * @param fileLineWriter ファイル出力用行ライタクラス
     */
    public void setFileLineWriter(FileLineWriter<JB0002Data> fileLineWriter){
        this.fileLineWriter = fileLineWriter;
    }
}

3. “JB0002.xml”を編集

“JB0002.xml”にビジネスロジックの定義を追加する。
手順2で作成した“FileBLogic”を指定するため、以下の定義を<beans></beans>内に追加する。

<!-- ビジネスロジック -->
<bean id="blogic" class="jp.terasoluna.batch.tutorial.uc0001.jb0002.FileBLogic">
    <property name="messageAccessor" ref="messageAccessor"/>
    <property name="fileLineWriter">
           <bean class="jp.terasoluna.fw.file.dao.standard.CSVFileLineWriter"
               destroy-method="closeFile">
               <constructor-arg index="0" value="outputfile/kokyaku.csv"/>
               <constructor-arg index="1" value="jp.terasoluna.batch.tutorial.uc0001.JB0002Data" />
               <constructor-arg index="2" ref="columnFormatterMap" />
           </bean>
     </property>
</bean>

“fileLineWriter”は、出力を行うクラスでファイルをオープンしたまま追記する場合に使用するファイルアクセス用Beanである。

参考資料
  • 『BC-01 ファイルアクセス機能』
  • 『BD-01 ビジネスロジック実行機能』

次項:2.3.5 ジョブ後処理の実装

Copyright (C) 2007 NTT DATA CORPORATION