/*
 * DBAccessorImplTest.java
 * Copyright (C) 2008 Cyber Beans Corporation. All rights reserved.
 */
package jp.co.cybec.cb3.accessor.dbaccess;

import jp.co.cybec.cb3.exception.AccessorUnknownException;
import jp.co.cybec.cb3.exception.ConfigFileDefinitionException;
import jp.co.cybec.cb3.exception.DataFileNoSuchSqlIdException;
import junit.framework.Assert;

import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

/**
*
* DBAccessorImplクラスのテストケース
*
* @author Lijuan Sun
*/
public class DBAccessorImplTest {
	// 設定ファイルパース
	private static String[] CONTEXT_XML_PATH = new String[] {
			"jp/co/cybec/cb3/accessor/dbaccess/TestDBAccessConfig.xml",
			"datasourceContext.xml",
			"transactionContext.xml"};

	// 変数を初期化する
	ApplicationContext context = new ClassPathXmlApplicationContext(CONTEXT_XML_PATH);
	// クラスをインスタンスする
	DBAccessorImpl dbaccessTmp = (DBAccessorImpl) context.getBean("dbAccessorImpl");
	DBQueryParameterMap parameter = null;
	DataSourceTransactionManager txManager;
	TransactionStatus status;

	@Before
	public void setup() throws Exception {

		// トランザクションを開始します
		startTransaction();

		// テーブルをクリアする
		dbaccessTmp.delete("delete1");

	}

	@After
	public void tearDown() throws Exception {

		// コミットします。
		commit();

	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * クエリーメソッドをテストする。
	 * (パラメータを付ける場合)
	 *
	 */
	@Test
	public void testSelect01() {

		DBRecord record = null;

		try {
			// パラメータを設定する
			parameter.put("EMP_CODE", "tst01");

			// データをインサートする
			dbaccessTmp.insert("insert1", parameter);
			// データを取得する
			DBRecordReader recordReader = dbaccessTmp.select("select1", parameter);
			Assert.assertNotNull(recordReader);
			// 結果をチェックする
			while ((record = recordReader.nextRecord()) != null) {
				Assert.assertEquals("tst01", record.getString("EMP_CODE"));
				Assert.assertEquals("abcde", record.getString("EMP_NAME"));
			}
		} catch (DataAccessException e) {
			e.printStackTrace();
			Assert.fail("テスト失敗");
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * インサートメソッドをテストする。
	 * (パラメータを付ける場合)
	 *
	 */
	@Test
	public void testInsert01() {

		try {
			// パラメータを設定する
			parameter.put("EMP_CODE", "tst01");

			// データをインサートする
			// 結果をチェックする
			Assert.assertEquals(1, dbaccessTmp.insert("insert1", parameter));
		} catch (DataAccessException e) {
			e.printStackTrace();
			Assert.fail("テスト失敗");
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 更新メソッドをテストする。
	 * (パラメータを付ける場合)
	 *
	 */
	@Test
	public void testUpdate01() {

		String empCd = null;

		try {
			// パラメータを設定する
			for (int i = 0; i < 6; i++) {
				empCd = "tst0" + String.valueOf(i);
				parameter.put("EMP_CODE", empCd);
				// データをインサートする
				dbaccessTmp.insert("insert1", parameter);
			}
			// 更新用パラメータを設定する
			parameter.clear();
			parameter.put("EMP_CODE", "tst01");
			parameter.put("EMP_NAME", "UPDATE1");
			// 結果をチェックする
			Assert.assertEquals(1, dbaccessTmp.update("update1", parameter));

		} catch (DataAccessException e) {
			e.printStackTrace();
			Assert.fail("テスト失敗");
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 削除メソッドをテストする。
	 * (パラメータを付ける場合)
	 *
	 */
	@Test
	public void testDelete01() {

		String empCd = null;

		try {
			// パラメータを設定する
			for (int i = 0; i < 5; i++) {
				empCd = "tst0" + String.valueOf(i);
				parameter.put("EMP_CODE", empCd);
				// データをインサートする
				dbaccessTmp.insert("insert1", parameter);
			}
			// 削除用パラメータを設定する
			parameter.clear();
			parameter.put("EMP_CODE", "tst01");
			// 結果をチェックする
			Assert.assertEquals(1, dbaccessTmp.delete("delete2", parameter));

		} catch (DataAccessException e) {
			e.printStackTrace();
			Assert.fail("テスト失敗");
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * クエリーメソッドをテストする。
	 * (パラメータを付けない場合)
	 *
	 */
	@Test
	public void testSelect02() {

		DBRecord record = null;

		try {
			// パラメータを設定する
			parameter.put("EMP_CODE", "tst01");

			// データをインサートする
			dbaccessTmp.insert("insert1", parameter);
			// データを取得する
			DBRecordReader recordReader = dbaccessTmp.select("select2");
			// 結果をチェックする
			while ((record = recordReader.nextRecord()) != null) {
				Assert.assertEquals(1, record.getInteger("count").intValue());
			}
		} catch (DataAccessException e) {
			e.printStackTrace();
			Assert.fail("テスト失敗");
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * インサートメソッドをテストする。
	 * (パラメータを付けない場合)
	 *
	 */
	@Test
	public void testInsert02() {

		try {
			// データをインサートする
			// 結果をチェックする
			Assert.assertEquals(1, dbaccessTmp.insert("insert2"));
		} catch (DataAccessException e) {
			e.printStackTrace();
			Assert.fail("テスト失敗");
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 更新メソッドをテストする。
	 * (パラメータを付けない場合)
	 *
	 */
	@Test
	public void testUpdate02() {

		String empCd = null;

		try {
			// パラメータを設定する
			for (int i = 0; i < 5; i++) {
				empCd = "tst0" + String.valueOf(i);
				parameter.put("EMP_CODE", empCd);
				// データをインサートする
				dbaccessTmp.insert("insert1", parameter);
			}
			// 結果をチェックする
			Assert.assertEquals(5, dbaccessTmp.update("update2"));

		} catch (DataAccessException e) {
			e.printStackTrace();
			Assert.fail("テスト失敗");
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 更新メソッドをテストする。
	 * (パラメータを付けない場合)
	 *
	 */
	@Test
	public void testDelete02() {

		String empCd = null;

		try {
			// パラメータを設定する
			for (int i = 0; i < 5; i++) {
				empCd = "tst0" + String.valueOf(i);
				parameter.put("EMP_CODE", empCd);
				// データをインサートする
				dbaccessTmp.insert("insert1", parameter);
			}
			// 結果をチェックする
			Assert.assertEquals(5, dbaccessTmp.delete("delete1"));
		} catch (DataAccessException e) {
			e.printStackTrace();
			Assert.fail("テスト失敗");
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * クエリーメソッドにエラー発生場合
	 *
	 */
	@Test
	public void testSelect03() {

		try {
			// データを取得するSQLを実行する
			dbaccessTmp.select("select3");

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataAccessException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 更新メソッドにエラー発生場合
	 *
	 */
	@Test
	public void testUpdate03() {

		try {
			// データを更新するSQLを実行する
			dbaccessTmp.update("update3");

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataAccessException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 削除メソッドにエラー発生場合
	 *
	 */
	@Test
	public void testDelete03() {

		try {
			// データを削除するSQLを実行する
			dbaccessTmp.delete("delete3");

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataAccessException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * インサートメソッドにエラー発生場合
	 *
	 */
	@Test
	public void testInsert03() {

		try {
			// データをインサートするSQLを実行する
			dbaccessTmp.insert("insert1", parameter);

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataAccessException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * インサートメソッドをテストする。
	 * (コミット単位を指定している、パラメータを付ける場合)
	 */
	@Test
	public void testInsert04() throws Exception {

		String code = null;
		try {
			for (int i = 0; i < 8; i++) {

				// パラメータを設定する
				code = "tst0" + String.valueOf(i);
				parameter.put("EMP_CODE", code);

				// 7件目エラー発生
				if (i == 6) {
					// パラメータをクリアする
					parameter.clear();
				}
				// データをインサートする
				dbaccessTmp.insert("insert4", parameter);
			}

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataAccessException)) {
				Assert.fail("テスト失敗");
			}
			rollback();
		} finally {
			// データを確認するためにトランザクションを開始します。
			startTransaction();
			// 結果をチェック
			// 予想：５件がインサートされる
			Assert.assertEquals(5, dbaccessTmp.delete("delete1"));
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 更新メソッドをテストする。
	 * (コミット単位を指定している、パラメータを付ける場合)
	 *
	 */
	@Test
	public void testUpdate04() {

		String code = null;
		String name = "testName";

		try {
			// １０件テストデータを作成する
			for (int i = 0; i < 10; i++) {
				// パラメータを設定する
				code = "tst0" + String.valueOf(i);
				parameter.put("EMP_CODE", code);
				dbaccessTmp.insert("insert4", parameter);
			}

			parameter.clear();
			// 3件コミット、1件ロールバック
			for (int i = 0; i < 6; i++) {
				code = "tst0" + String.valueOf(i);
				parameter.put("EMP_CODE", code);
				parameter.put("EMP_NAME", name);
				// 5件目エラー発生
				if (i == 4) {
					// パラメータをクリアする
					parameter.clear();
				}
				// 更新する
				dbaccessTmp.update("update4", parameter);
			}

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataAccessException)) {
				Assert.fail("テスト失敗");
			}
			rollback();
		} finally {
			// データを確認するためにトランザクションを開始します。
			startTransaction();
			// 結果をチェック
			parameter.clear();
			parameter.put("EMP_NAME", name);
			// 予想：3件が更新される
			Assert.assertEquals(3, dbaccessTmp.delete("delete6", parameter));
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 削除メソッドをテストする。
	 * (コミット単位を指定している、パラメータを付ける場合)
	 *
	 */
	@Test
	public void testdelete04() {

		String code = null;

		try {
			// １０件テストデータを作成する
			for (int i = 0; i < 10; i++) {
				// パラメータを設定する
				code = "tst0" + String.valueOf(i);
				parameter.put("EMP_CODE", code);
				dbaccessTmp.insert("insert4", parameter);
			}

			parameter.clear();
			// 4件コミット、1件ロールバック
			for (int i = 0; i < 6; i++) {
				code = "tst0" + String.valueOf(i);
				parameter.put("EMP_CODE", code);
				// ６件目エラー発生
				if (i == 5) {
					// パラメータをクリアする
					parameter.clear();
				}
				// 削除する
				dbaccessTmp.delete("delete4", parameter);
			}

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataAccessException)) {
				Assert.fail("テスト失敗");
			}
			rollback();
		} finally {
			// データを確認するためにトランザクションを開始します。
			startTransaction();
			// 結果をチェック
			// 予想：後6件が削除される
			Assert.assertEquals(6, dbaccessTmp.delete("delete1"));
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * インサートメソッドをテストする。
	 * (コミット単位を指定している、パラメータを付けてない場合)
	 *
	 */
	@Test
	public void testInsert05() {

		try {
			for (int i = 0; i < 3; i++) {

				// データをインサートする
				// ２件目エラー発生
				dbaccessTmp.insert("insert5");
			}
		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataAccessException)) {
				Assert.fail("テスト失敗");
			}
		} finally {
			// 結果をチェック
			Assert.assertEquals(1, dbaccessTmp.delete("delete1"));
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 更新メソッドをテストする。
	 * (コミット単位を指定している、パラメータを付けてない場合)
	 *
	 */
	@Test
	public void testUpdate05() {

		try {
			dbaccessTmp.update("update5");
		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataAccessException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 削除メソッドをテストする。
	 * (コミット単位を指定している、パラメータを付けてない場合)
	 *
	 */
	@Test
	public void testDelete05() {

		try {
			dbaccessTmp.delete("delete5");

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataAccessException)) {
				Assert.fail("テスト失敗");
			}
		} finally {
			// 結果をチェック
			Assert.assertEquals(0, dbaccessTmp.delete("delete1"));
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl#insert(String)} のためのテスト・メソッド。
	 * 設定ファイルに記述ミスがある場合のテスト。
	 * 分割コミットに数字以外の文字列を指定していた場合に、適切な例外が発生することを確認する。
	 */
	@Test
	public void testInsert06() {

		try {
			// データをインサートするSQLを実行する
			dbaccessTmp.insert("insert6");

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataFileNoSuchSqlIdException)) {
				System.out.println(e);
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 更新メソッドにその他エラー発生場合
	 *
	 */
	@Test
	@Ignore
	public void testUpdate06() {

		try {
			// データを更新するSQLを実行する
			dbaccessTmp.update("update6");

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof AccessorUnknownException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 削除メソッドにその他エラー発生場合
	 *
	 */
	@Test
	@Ignore
	public void testDelete06() {

		try {
			// データを削除するSQLを実行する
			dbaccessTmp.delete("delete7");

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof AccessorUnknownException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * インサートメソッドにその他エラー発生場合
	 *
	 */
	@Test
	@Ignore
	public void testInsert07() {

		try {
			// データをインサートするSQLを実行する
			parameter.put("EMP_CODE", "tst01");
			dbaccessTmp.insert("insert7", parameter);

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof AccessorUnknownException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 更新メソッドにその他エラー発生場合
	 *
	 */
	@Test
	@Ignore
	public void testUpdate07() {

		try {
			// データを更新するSQLを実行する
			parameter.put("EMP_CODE", "tst01");
			dbaccessTmp.update("update7", parameter);

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof AccessorUnknownException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 削除メソッドにその他エラー発生場合
	 *
	 */
	@Test
	@Ignore
	public void testDelete07() {

		try {
			// データを削除するSQLを実行する
			parameter.put("EMP_CODE", "tst01");
			dbaccessTmp.delete("delete8", parameter);

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof AccessorUnknownException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 設定ファイルを読み込むエラー発生場合
	 */
	@Test
	public void testInitial() {
		try {
			// bad設定ファイルを読み込む
			dbaccessTmp.initialize("jp/co/cybec/cb3/accessor/dbaccess/TestDBAccessConfig");
		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof ConfigFileDefinitionException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * クエリーSQL文がNULL場合
	 *
	 */
	@Test
	public void testSelect08() {

		try {
			// データを取得するSQLを実行する
			dbaccessTmp.select("aa", parameter);

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataFileNoSuchSqlIdException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * インサートSQL文がNULL場合
	 *
	 */
	@Test
	public void testInsert08() {

		try {
			// データをインサートするSQLを実行する
			dbaccessTmp.insert("aa", parameter);

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataFileNoSuchSqlIdException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 更新SQL文がNULL場合
	 *
	 */
	@Test
	public void testUpdate08() {

		try {
			// データを更新するSQLを実行する
			dbaccessTmp.update("aa", parameter);

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataFileNoSuchSqlIdException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 削除SQL文がNULL場合
	 *
	 */
	@Test
	public void testDelete08() {

		try {
			// データを削除するSQLを実行する
			dbaccessTmp.delete("aa", parameter);

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataFileNoSuchSqlIdException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * クエリーSQL文がNULL場合
	 *
	 */
	@Test
	public void testSelect09() {

		try {
			// データを取得するSQLを実行する
			dbaccessTmp.select("aa");

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataFileNoSuchSqlIdException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * インサートSQL文がNULL場合
	 *
	 */
	@Test
	public void testInsert09() {

		try {
			// データをインサートするSQLを実行する
			dbaccessTmp.insert("aa");

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataFileNoSuchSqlIdException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 更新SQL文がNULL場合
	 *
	 */
	@Test
	public void testUpdate09() {

		try {
			// データを更新するSQLを実行する
			dbaccessTmp.update("aa");

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataFileNoSuchSqlIdException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 *
	 * {@link jp.co.cybec.cb3.accessor.dbaccess.DBAccessorImpl} のためのテスト・メソッド。
	 * 削除SQL文がNULL場合
	 *
	 */
	@Test
	public void testDelete09() {

		try {
			// データを削除するSQLを実行する
			dbaccessTmp.delete("aa");

		} catch (Exception e) {
			// 結果チェック
			if (!(e instanceof DataFileNoSuchSqlIdException)) {
				Assert.fail("テスト失敗");
			}
		}
	}

	/**
	 * トランザクションを開始します。
	 */
	private void startTransaction() {

		// トランザクションを開始します。
		txManager = (DataSourceTransactionManager) context.getBean("transactionManager");
		DefaultTransactionDefinition def = new DefaultTransactionDefinition();
		def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
		status = txManager.getTransaction(def);

		// 設定ファイルを読み込む
		dbaccessTmp.initialize("jp/co/cybec/cb3/accessor/dbaccess/dbaccessConfig");

		// パラメータを設定する
		parameter = new DBQueryParameterMap();
		parameter.put("EMP_NAME", "abcde");
		parameter.put("EMP_CELLULAR_PHONE", "123456789");
		parameter.put("EMP_BIRTH", "19800101");
		parameter.put("EMP_SEX", "1");
	}

	/**
	 * コミットします。
	 */
	private void commit() {

		// リリース
		dbaccessTmp.release();

		// コミット
		if (!status.isCompleted()) {
			txManager.commit(status);
		}
	}

	/**
	 * ロールバックします。
	 */
	private void rollback() {

		// リリース
		dbaccessTmp.release();

		// ロールバック
		if (!status.isCompleted()) {
			txManager.rollback(status);
		}
	}
}
