package jp.terasoluna.batch.functionsample.b001;

import jp.terasoluna.fw.batch.blogic.BLogic;
import jp.terasoluna.fw.batch.blogic.vo.BLogicParam;
import jp.terasoluna.fw.batch.util.BatchUtil;
import jp.terasoluna.fw.dao.QueryRowHandleDAO;
import jp.terasoluna.fw.dao.event.DataRowHandler;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;

/**
 * DB関連ジョブのサンプル<br>
 * <br>
 * 
 * 事前準備：EMPLOYEEテーブルを作成しておくこと<br>
 * <br>
 * サンプル内容：RowHandlerを利用して大量データを一件ずつ更新してコミットするサンプル。<br>
 * BLogicインタフェースを利用し、複数データソースを利用するサンプル
 * 
 * 
 */
public class B001009BLogic implements BLogic {

	private static final int BATCH_NORMAL_END = 0;

	@Autowired
	@Qualifier("queryRowHandleDAO")
	private QueryRowHandleDAO queryRowHandleDAO = null;

	@Autowired
	@Qualifier("b001009DataRowHandler")
	private DataRowHandler b001009DataRowHandler = null;

	@Autowired
	@Qualifier("transactionManager")
	private PlatformTransactionManager transactionManager = null;

	public int execute(BLogicParam arg0) {

		TransactionStatus stat = null;

		stat = BatchUtil.startTransaction(transactionManager);

		try {
			B001009Param param = new B001009Param();
			queryRowHandleDAO.executeWithRowHandler("B001009.selectEmployee",
					param, b001009DataRowHandler);
			BatchUtil.commitTransaction(transactionManager, stat);
		}finally {
			BatchUtil.endTransaction(transactionManager, stat);
		}

		return BATCH_NORMAL_END;

	}

}
