ラベル JAVA の投稿を表示しています。 すべての投稿を表示
ラベル JAVA の投稿を表示しています。 すべての投稿を表示

2015年2月24日火曜日

Spring - 01

DIについて、
基本的な事項は省略

DIの目的について
①POJOの利用
②DIコンテナからnew演算子を消す
 ⇒FactoryMethodなどのデザインパターンの排除
③DIコンテナから渡されるインスタンスをインタフェースで受け取る
 ⇒インタフェースのコンポーネント化
 ⇒クラス(インタフェースの実装)が変更・拡張されても、それを利用しているクラスのへの影響範囲を極小化できる。
 ⇒利用しているクラス(インタフェースの実装)を置き換えてもテストが可能。

DIの利用範囲
①コントローラとサービスとの依存関係
②サービスとDAOとの依存関係

アノテーションとDI
①インスタンス変数の前に@Autowiredをつけると、DIコンテナがそのインスタンス変数の型に代入できるクラスを@Componentがついているクラスの中から見つける
 ⇒インジェクションをする
 ⇒インスタンス変数以外にメソッド宣言前でも可能
②DI方法はXML定義
 ⇒Bean定義ファイルが必要
 
  @Autowired、@Resourceを利用する場合の宣言

  @Conpmnent、@Serviceなどのコンポーネントを利用する場合の宣言
③インジェクション可能なクラスは1個
 ⇒複数名がある場合、@Qualifierを使用する(@Componentに名前を使用する)
 ⇒Bean定義ファイルを利用する

2013年5月28日火曜日

JUnit DBUnit - 4

DbUnitでexcelファイルを読み込み、DBへ登録する初期値やテスト結果の期待値を取得します。それにはorg.dbunit.dataset.excel.XlsDataSetを使います。
このXlsDataSetはコンストラクタでjava.io.Fileかjava.io,InputStreamを渡します。

DbUnitを拡張して独自にテストフレームワークを作成する
クラスローダを利用
ClassLoader#getResourceAsStream()を呼び出し、InputStreamを取得
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream inputStream = classLoader.getResourceAsStream("excelファイルのフルパス");




JUnit DBUnit - 3

DaoBaseTestCaseは、テストデータExcelファイル(xxx_prepare.xls)からIDataSetオブジェクトを生成し、テストデータとして使用します。テストの実行前にこのテストデータが自動的にデータベースに反映されることになります。

事前処理の元データを退避し、テストデータを投入する機能や事後処理の元データを復元する機能、またはデータベースに登録されているデータを取得する機能などを、あらかじめ基底クラスに用意しておけば、基底クラスを継承して作成する各テストクラス作業が大変楽になります。



getConnectionは、DBコネクションを取得するメソッドです。getActualTableは、データベースに登録されているデータを取得するメソッドとなります。


getExpectedTableは、テスト結果として期待されるデータを取得するメソッドです。getTableRowCountは、データベースに登録されているデータ件数を取得するメソッドとなります。

assertTableは、期待値とデータベースに登録されているデータの比較をするメソッドです。isSkipColumnは、assertTableメソッド実行時に、比較をスキップするカラム名を指定するメソッドとなります。

assertEntityは、期待値とEntityデータの比較をするメソッドです。getTestFileNameは、テストデータExcelファイルの名前を取得するメソッドとなります。

getExpectedTableは、期待値データを取得するメソッドです。getSubClassは、サブクラスの実行時クラスを取得するメソッドとなります。


テストケース作成手順

①まず、テストクラスには基底クラスのDaoBaseTestCaseを継承させます(リスト1)。
②次に、DaoBaseTestCaseで宣言されている抽象メソッド「getTestFileName」「getTestFileName」「getSubClass」を実装します(リスト2)。
getTestFileNameは、テストデータExcelファイルの名称を指定します。getExpectedTableは、テスト結果として期待されるデータを取得します。getSubClassは、自分自身の実行時クラスを指定します。
登録(更新)系のテストで、期待値とデータベースに登録されているデータの比較をする際、期待値を予測できないカラム(例:「更新日時」など現在日時が設定されるカラム)が存在する場合は、DaoBaseTestCaseクラスのisSkipColumnメソッドをオーバーライドし、比較しない(スキップする)カラムを指定します(リスト3)。

スキップするカラムが存在しない場合、isSkipColumnメソッドはオーバーライドする必要はありません。

最後にテストアセットを作成し、テストコードを記述します。
登録(更新)系は、登録(更新)後のテーブルの値とExcelシートのデータを比較します(リスト4)。検索系は検索結果が正しいかどうかをEntityとExcelシートで比較します(リスト5)。



package dbunit_sample;




import java.io.File;

import java.io.FileOutputStream;

import java.lang.reflect.Method;

import java.math.BigDecimal;

import java.sql.SQLException;

import java.util.Date;



import junit.framework.TestCase;



import org.dbunit.database.IDatabaseConnection;

import org.dbunit.database.QueryDataSet;

import org.dbunit.dataset.Column;

import org.dbunit.dataset.DataSetException;

import org.dbunit.dataset.IDataSet;

import org.dbunit.dataset.ITable;

import org.dbunit.dataset.ReplacementDataSet;

import org.dbunit.dataset.excel.XlsDataSet;

import org.dbunit.dataset.xml.FlatXmlDataSet;

import org.dbunit.operation.DatabaseOperation;



/**

* DAOテストの基底クラス.

*/

public abstract class DaoBaseTestCase extends TestCase {



/**

* 全テーブル名.

*/

protected static final String[] TABLE_NAME_ALL;



/**

* テーブル数.

*/

private static final int TABLE_SIZE = 1;



/**

* テーブル名.

*/

private static final String TABLE_NAME = "syohin";



/**

* 元データ退避用一時ファイル.

*/

private File file;



/**

* データベースコネクション.

*/

private IDatabaseConnection connection;



/**

* テーブル名を取得する.

*/

static {



TABLE_NAME_ALL = new String[TABLE_SIZE];



for (int i = 0; i < TABLE_NAME_ALL.length; i++) {

String tableName = TABLE_NAME + (i + 1);



if (null == tableName) {

break;

}



TABLE_NAME_ALL[i] = tableName;

}

}



/**

* コンストラクタ.

*

* @param arg0 パラメータ

*/

public DaoBaseTestCase(String arg0) {

super(arg0);

}



/**

* 事前処理.

* 元データを退避し、テストデータを投入する。

*

* @throws Exception 事前処理中にエラーが発生した

*/

protected void setUp() throws Exception {



super.setUp();



try {

connection = this.getConnection();



QueryDataSet queryDataSet = new QueryDataSet(connection);

for (int i = 0; i < TABLE_NAME_ALL.length; i++) {

queryDataSet.addTable(TABLE_NAME_ALL[i]);

}

this.file = File.createTempFile("tmp", ".xml");

FlatXmlDataSet.write(queryDataSet, new FileOutputStream(this.file));



DatabaseOperation.CLEAN_INSERT.execute(connection, this

.getDataSet(getTestFileName()));



} catch (Exception e) {

if (connection != null) {

connection.close();

}

throw e;

}

}



/**

* 事後処理.

* 元データを復元する。

*

* @throws Exception 事後処理中にエラーが発生した

*/

protected void tearDown() throws Exception {



super.tearDown();



try {

DatabaseOperation.CLEAN_INSERT.execute(connection,

new FlatXmlDataSet(this.file));

} catch (Exception e) {

throw e;

} finally {

if (connection != null) {

connection.close();

}

}

}



/**

* DBコネクションを取得する.

*

* @return DBコネクション

*/

protected IDatabaseConnection getConnection() {



return ConnectionManager.getConnection();

}



/**

* データベースに登録されているデータを取得する.

*

* @param tableName テーブル名

* @return データベースに登録されているデータ

* @throws SQLException データベースに登録されているデータの

* 取得中にエラーが発生した

*/

protected ITable getActualTable(String tableName) throws Exception {



IDatabaseConnection connection = null;



try {

connection = getConnection();

return connection.createDataSet().getTable(tableName);

} catch (Exception e) {

throw e;

} finally {

if (connection != null) {

connection.close();

}

}

}



/**

* テスト結果として期待されるデータを取得する.

*

* @param tableName テーブル名

* @param fileName テストファイル名

* @return テスト結果として期待されるデータ

* @throws Exception データの取得中にエラーが発生した

*/

protected ITable getExpectedTable(String tableName, String fileName)

throws Exception {



return this.getDataSet(fileName).getTable(tableName);

}



/**

* データベースに登録されているデータ件数を取得する.

*

* @param tableName テーブル名

* @return データ件数

* @throws Exception データ件数の取得中にエラーが発生した

*/

protected int getTableRowCount(String tableName) throws Exception {



IDatabaseConnection connection = null;



try {

connection = getConnection();

return connection.createDataSet().getTable(tableName).getRowCount();

} finally {

if (connection != null) {

connection.close();

}

}

}



/**

* 期待値とデータベースに登録されているデータの比較をする.

*

* @param expectedTable 期待値データ

* @param actualTable データベースに登録されているデータ

* @throws DataSetException データの比較中にエラーが発生した

*/

protected void assertEquals(ITable expectedTable, ITable actualTable)

throws DataSetException {



for (int i = 0; i < expectedTable.getRowCount(); i++) {

for (int j = 0; j < expectedTable.getTableMetaData().getColumns().length; j++) {

Column[] columns = expectedTable.getTableMetaData()

.getColumns();

String columnName = columns[j].getColumnName();



if (this.isSkipColumn(columnName)) {

continue;

}



assertEquals("Line:" + (i + 1) + " Column:" + columnName,

convertData(expectedTable.getValue(i, columnName)),

convertData(actualTable.getValue(i, columnName)));

}

}

}



/**

* assertTableメソッド実行時、比較をスキップするカラム名を指定する.

*

* @param columnName カラム名

* @return true:スキップ、false:スキップなし

*

*/

protected boolean isSkipColumn(String columnName) {

return false;

}



/**

* 期待値とEntityデータの比較をする.

*

* @param expectedTable 期待値データ

* @param actuals 実際のデータ

* @throws Exception 期待値とEntityデータの比較中にエラーが発生した

*/

protected void assertEquals(ITable expectedTable, Object actuals)

throws Exception {



this.assertEquals(expectedTable, new Object[] { actuals });

}



/**

* 期待値とEntityデータの比較をする.

*

* @param expectedTable 期待値データ

* @param actuals 実際のデータ

* @throws Exception 期待値とEntityデータの比較中にエラーが発生した

*/

protected void assertEquals(ITable expectedTable, Object[] actuals)

throws Exception {



for (int i = 0; i < expectedTable.getRowCount(); i++) {

for (int j = 0; j < expectedTable.getTableMetaData().getColumns().length; j++) {

Column[] columns = expectedTable.getTableMetaData()

.getColumns();

String columnName = columns[j].getColumnName();

String getterName = this.buildGetterName(columnName);



Object actual = actuals[i];

Class[] paramClass = new Class[0];

Object[] paramValue = new Object[0];

Method method = actual.getClass().getDeclaredMethod(getterName,

paramClass);



assertEquals("Line:" + (i + 1) + " Column:" + columnName,

String.valueOf(expectedTable.getValue(i, columnName))

.trim(), String.valueOf(

method.invoke(actual, paramValue)).trim());

}

}

}



/**

* テストデータExcelファイルの名前を取得する.

*

* @return テストデータExcelファイル名称

*/

protected abstract String getTestFileName();



/**

* 期待値データを取得する.

*

* @param index インデックス番号

* @return 期待値データ

* @throws Exception 期待値データの取得中にエラーが発生した

*/

protected abstract ITable getExpectedTable(String index) throws Exception;



/**

* サブクラスの実行時クラスを取得する.

*

* @return 実行時クラス

*/

protected abstract Class getSubClass();



/**

* ファイル名を指定してデータセットを取得する.

*

* @param fileName ファイル名

* @return データセット

* @throws Exception データセットの取得中にエラーが発生した

*/

private IDataSet getDataSet(String fileName) throws Exception {



ReplacementDataSet expectedDataSet = new ReplacementDataSet(

new XlsDataSet(getSubClass().getResourceAsStream(fileName)));

expectedDataSet.addReplacementObject("[SYSDATE]", new Date(System

.currentTimeMillis()));

expectedDataSet.addReplacementObject("[NULL]", null);



return expectedDataSet;

}



/**

* カラム名を指定してgetterメソッド名を取得する.

*

* @param columnName カラム名

* @return getterメソッド名

*/

private String buildGetterName(String columnName) {



String getterName = "get";

String temp = columnName;



while (true) {

int index = temp.indexOf("_");



if (index == -1) {

getterName += temp.substring(0, 1).toUpperCase();

getterName += temp.substring(1).toLowerCase();

break;

}



getterName += temp.substring(0, 1).toUpperCase();

getterName += temp.substring(1, index).toLowerCase();

temp = temp.substring(index + 1);

}



return getterName;

}



/**

* データを変換する.

*

* @param data データ

* @return 変換後データ

*/

private Object convertData(Object data) {



if (data instanceof String) {

String dataStr = ((String) data).trim();

if ("true".equalsIgnoreCase(dataStr)) {

return Boolean.TRUE;

} else if ("false".equalsIgnoreCase(dataStr)) {

return Boolean.FALSE;

}

return dataStr;

} else if (data instanceof BigDecimal) {

return new Integer(((BigDecimal) data).intValue());

} else {

return data;

}

}

}

  ========================----sample package dbunit_sample;



import org.dbunit.dataset.ITable;



/**

* SampleDaoImplクラスのテスト.

*/

public class SampleDaoImplTest extends DaoBaseTestCase {



private static final String TABLE_NAME = TABLE_NAME_ALL[1];



private SampleDao sampleDao;



public static void main(String[] args) {

junit.textui.TestRunner.run(SampleDaoImplTest.class);

}



public SampleDaoImplTest(String arg0) {

super(arg0);

}



protected void setUp() throws Exception {

super.setUp();



this.sampleDao = new SampleDaoImpl(getConnection().getConnection());

}



protected void tearDown() throws Exception {

super.tearDown();

}



/**

* getDataメソッドの動作確認.

* データが取得されていることを確認する。

* @throws Exception

*

*/

public void testGetData() throws Exception {



assertEquals(getExpectedTable("1"), sampleDao.getData());

}



/**

* Insertメソッドの動作確認.

* データが登録されていることを確認する。

*

*/

public void testInsert() {



try {

Syohin syohin = new Syohin();

syohin.setId("5");

syohin.setName("syohin5");

syohin.setPrice(new Integer(5000));



// ロジックの実行

sampleDao.insert(syohin);



assertEquals(5, getTableRowCount(TABLE_NAME));



// 期待値とデータの比較

assertEquals(getExpectedTable("1"), getActualTable(TABLE_NAME));



} catch (Throwable e) {

fail(e.getMessage());

}

}



/**

* テストデータExcelファイルの名前を取得する.

*

* @return テストデータExcelファイル名称

*/

protected String getTestFileName() {

return "TestSampleDaoImpl_prepare.xls";

}



/**

* 期待値データを取得する.

*

* @param index インデックス番号

* @return 期待値データ

* @throws Exception 期待値データの取得中にエラーが発生した

*/

protected ITable getExpectedTable(String index) throws Exception {



return getExpectedTable(TABLE_NAME_ALL[1] + index,

"TestSampleDaoImpl_expected.xls");

}



/**

* サブクラスの実行時クラスを取得する.

*

* @return 実行時クラス

*/

protected Class getSubClass() {



return this.getClass();

}

}




JUnit DBUnit - 2

データはXML形式

テスト対象ソース AcceptOrderBean.java
import java.sql.*;

import java.util.ArrayList;

public class AcceptOrderBean {

private String o_num;
private String c_num;
private String p_num;
private int dc_rate;
private int option_price;
private String employee;
private Date accept_date;

public String getO_num() {
return o_num;
}

public String getC_num() {
return c_num;
}

public String getP_num() {
return p_num;
}

public int getDc_rate() {
return dc_rate;
}

public int getOption_price() {
return option_price;
}

public String getEmployee() {
return employee;
}

public Date getAccept_date() {
return accept_date;
}

public void setO_num(String o_num) {
this.o_num = o_num;
}

public void setC_num(String c_num) {
this.c_num = c_num;
}

public void setP_num(String p_num) {
this.p_num = p_num;
}

public void setDc_rate(int dc_rate) {
this.dc_rate = dc_rate;
}

public void setOption_price(int option_price) {
this.option_price = option_price;
}

public void setEmployee(String employee) {
this.employee = employee;
}

public void setAccept_date(Date date) {
this.accept_date = date;
}

private static Connection getConnection() throws Exception {
Class.forName(""com.mysql.jdbc.Driver"");
Connection connection = null;
// connection = DriverManager.getConnection(
// ""jdbc:mysql://localhost:3306/dbunit"", ""root"", """");
connection = DriverManager.getConnection(
""jdbc:mysql:///dbunit?useUnicode=true&charcterEncoding=UTF-8"",
""root"", """");
connection.setAutoCommit(false);
return connection;

}

public void loadByO_num(String o_num) throws Exception {

Connection connection = null;
try {
connection = getConnection();
connection.setAutoCommit(true);
String sql = ""select * from Accept_Order where o_num=?"";

PreparedStatement stat = connection.prepareStatement(sql);
stat.setString(1, o_num);
ResultSet result = stat.executeQuery();

if (result.next()) {
this.o_num = o_num;
this.c_num = result.getString(""c_num"");
this.p_num = result.getString(""p_num"");
this.dc_rate = result.getInt(""dc_rate"");
this.option_price = result.getInt(""option_price"");
this.employee = result.getString(""employee"");
this.accept_date = result.getDate(""accept_date"");
}

} finally {
if (connection != null)
connection.close();
}

}

public static AcceptOrderBean[] findByEmployee(String employee)
throws Exception {

Connection connection = null;
try {
connection = getConnection();
String sql = ""select * from Accept_Order where employee=?"";

PreparedStatement stat = connection.prepareStatement(sql);
stat.setString(1, employee);
ResultSet result = stat.executeQuery();
ArrayList list = new ArrayList();

while (result.next()) {
AcceptOrderBean accept = new AcceptOrderBean();
accept.o_num = result.getString(""o_num"");
accept.c_num = result.getString(""c_num"");
accept.p_num = result.getString(""p_num"");
accept.dc_rate = result.getInt(""dc_rate"");
accept.option_price = result.getInt(""option_price"");
accept.employee = result.getString(""employee"");
accept.accept_date = result.getDate(""accept_date"");
list.add(accept);
}

return (AcceptOrderBean[]) list.toArray(new AcceptOrderBean[list
.size()]);

} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
}
}

}

public void store() throws Exception {

Connection connection = null;
try {
connection = getConnection();
String sql = ""insert into Accept_Order values(?,?,?,?,?,?,?)"";

PreparedStatement stat = connection.prepareStatement(sql);
stat.setString(1, this.o_num);
stat.setString(2, this.c_num);
stat.setString(3, this.p_num);
stat.setInt(4, this.dc_rate);
stat.setInt(5, this.option_price);
stat.setString(6, this.employee);
stat.setDate(7, this.accept_date);
stat.executeUpdate();

connection.commit();

} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
}
}

}

public void delete() throws Exception {

Connection connection = null;
try {
connection = getConnection();
String sql = ""delete from Accept_Order where o_num=?"";

PreparedStatement stat = connection.prepareStatement(sql);
stat.setString(1, this.o_num);
stat.executeUpdate();

connection.commit();

} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
}
}

}

}


テストケース AcceptOrderBeanTest.java
import static org.junit.Assert.*;


import org.dbunit.Assertion;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.QueryDataSet;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ITable;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.File;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Date;
import java.sql.DriverManager;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class AcceptOrderBeanTest extends AcceptOrderBean {

private File file;

private static Connection getConnection() throws Exception {
Class.forName(""com.mysql.jdbc.Driver"");
Connection connection = null;
// connection = DriverManager.getConnection(
// ""jdbc:mysql://localhost:3306/dbunit"", ""root"", """");
connection = DriverManager.getConnection(
""jdbc:mysql:///dbunit?useUnicode=true&charcterEncoding=UTF-8"",
""root"", """");
// テストソースではコミット宣言はデフォルトのままでよい。
// connection.setAutoCommit(false);
return connection;

}

@BeforeClass
public static void setUpBeforeClass() throws Exception {
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

@SuppressWarnings(""deprecation"")
@Before
public void setUp() throws Exception {

IDatabaseConnection connection = null;
try {
Connection conn = getConnection();
connection = new DatabaseConnection(conn);

// 現状のバックアップを取得
QueryDataSet partialDataSet = new QueryDataSet(connection);
partialDataSet.addTable(""ACCEPT_ORDER"");
file = File.createTempFile(""accept"", "".xml"");
FlatXmlDataSet.write(partialDataSet, new FileOutputStream(file));

// テストデータを投入する
IDataSet dataSet = new FlatXmlDataSet(new FileInputStream(
""C:/pleiades/workspace/dbtest/src/accept_order_data.xml""));
DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (connection != null)
connection.close();
} catch (SQLException e) {
}
}

}

@SuppressWarnings(""deprecation"")
@After
public void tearDown() throws Exception {

IDatabaseConnection connection = null;
try {
Connection conn = getConnection();
connection = new DatabaseConnection(conn);

IDataSet dataSet = new FlatXmlDataSet(file);
DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (connection != null)
connection.close();
} catch (SQLException e) {
}
}

}

@Test
public void testLoadByO_num() throws Exception {
// loadByO_numメソッドを実行
AcceptOrderBean order = new AcceptOrderBean();
order.loadByO_num(""5001"");

// 実行結果を確認

// 取得したAcceptOrderBeanの配列は「文字列」で比較する。

assertEquals(""accept_date=2004-01-01"",
""accept_date="" + order.getAccept_date());
assertEquals(""c_num=1000"", ""c_num="" + order.getC_num());
assertEquals(""dc_rate=5"", ""dc_rate="" + order.getDc_rate());
assertEquals(""employee=101"", ""employee="" + order.getEmployee());
assertEquals(""o_num=5001"", ""o_num="" + order.getO_num());
assertEquals(""option_price=30"",
""option_price="" + order.getOption_price());
assertEquals(""p_num=501"", ""p_num="" + order.getP_num());

}

@SuppressWarnings(""deprecation"")
@Test
public void testDelete() throws Exception {

// deleteメソッドを実行
AcceptOrderBean order = new AcceptOrderBean();
order.setO_num(""5003"");
order.delete();

// 実行結果を確認
IDatabaseConnection connection = null;
try {
// accept_orderテーブルの状態を確認
Connection conn = getConnection();
connection = new DatabaseConnection(conn);

IDataSet databaseDataSet = connection.createDataSet();
ITable actualTable = databaseDataSet.getTable(""accept_order"");

// あるべき姿を確認
IDataSet expectedDataSet = new FlatXmlDataSet(new FileInputStream(
""C:/pleiades/workspace/dbtest/src/accept_order_data3.xml""));
ITable expectedTable = expectedDataSet.getTable(""accept_order"");

// 比較する
Assertion.assertEquals(expectedTable, actualTable);
} finally {
if (connection != null)
connection.close();
}
}

@SuppressWarnings(""deprecation"")
@Test
public void testStore() throws Exception {

// storeメソッドの実行
AcceptOrderBean order = new AcceptOrderBean();
order.setO_num(""5004"");
order.setC_num(""1004"");
order.setP_num(""501"");
order.setDc_rate(20);
order.setOption_price(400);
order.setEmployee(""101"");
order.setAccept_date(Date.valueOf(""2004-01-03""));

order.store();

// 実行結果を検証する
IDatabaseConnection connection = null;
try {
// accept_orderテーブルの状態を確認
Connection conn = getConnection();
connection = new DatabaseConnection(conn);

IDataSet databaseDataSet = connection.createDataSet();
ITable actualTable = databaseDataSet.getTable(""accept_order"");

// 期待されるデータを取得
IDataSet expectedDataSet = new FlatXmlDataSet(new FileInputStream(
""C:/pleiades/workspace/dbtest/src/accept_order_data2.xml""));
ITable expectedTable = expectedDataSet.getTable(""accept_order"");

// 比較する
Assertion.assertEquals(expectedTable, actualTable);
} finally {
if (connection != null)
connection.close();
}

}



// @Test
public final void test() {

}
}

データ
<?xml version='1.0' encoding="UTF-8"?>
<dataset>
<ACCEPT_ORDER o_num="5001" c_num="1000" p_num="501" dc_rate="5"
option_price="30" employee="101" accept_date="2004-01-01" />
<ACCEPT_ORDER o_num="5002" c_num="1001" p_num="502" dc_rate="10"
option_price="20" employee="104"
accept_date="2004-02-02" />
<ACCEPT_ORDER o_num="5003" c_num="1002" p_num="503" dc_rate="15"
option_price="10" employee="101" accept_date="2004-01-31" />
</dataset>


<?xml version='1.0' encoding="UTF-8"?>
<dataset>
<ACCEPT_ORDER o_num="5001" c_num="1000" p_num="501" dc_rate="5"
option_price="30" employee="101" accept_date="2004-01-01" />
<ACCEPT_ORDER o_num="5002" c_num="1001" p_num="502" dc_rate="10"
option_price="20" employee="104"
accept_date="2004-02-02" />
<ACCEPT_ORDER o_num="5003" c_num="1002" p_num="503" dc_rate="15"
option_price="10" employee="101" accept_date="2004-01-31" />
<ACCEPT_ORDER o_num="5004" c_num="1004" p_num="501" dc_rate="20"
option_price="400" employee="101" accept_date="2004-01-03" />
</dataset>


<?xml version='1.0' encoding="UTF-8"?>
<dataset>
  <ACCEPT_ORDER o_num="5001" c_num="1000" p_num="501" dc_rate="5"
  option_price="30" employee="101" accept_date="2004-01-01" />
  <ACCEPT_ORDER o_num="5002" c_num="1001" p_num="502" dc_rate="10"
  option_price="20" employee="104"
  accept_date="2004-02-02" />
</dataset>

JUnit DBUnit - 1

◆必要なライブラリ
dbunit-2.4.9.jar

junit-4.10.jar
log4j-1.2.15.jar
slf4j-api-1.7.5.jar
slf4j-ext-1.7.5.jar
slf4j-log4j12-1.7.5.jar
slf4j-migrator-1.7.5.jar

◆ロギングがないとエラーが発生します。
「java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory」

◆LOG4Jのダウンロード先
http://logging.apache.org/log4j/1.2/

2012年10月2日火曜日

サーバサイドJava-002

第2章
必要なソフトウエアをインストールおよび設定する

①JDK7のインストール
②TOMCAT7.0のインストール
③MySQL5.5のインストール
④Eclipseのインストール

各種設定は設定ファイルを参照

2012年10月1日月曜日

サーバサイドJava-001

第1章の基本的まとめ

1-1
【Webアプリケーションとは】
インターネット機能を特徴を利用したアプリケーション

①Webアプリケーションを公開するにはWebアプリケーションを実行するための環境Webサーバが必要
②利用する際はネットワークに接続したパソコン、携帯端末のWebブラウザが必要

具体的なものは
①インターネット検索エンジン(Google、Yahooなど・・・)
②アマゾンの通信販売
③Twitter、FacebookなどのSNS(ソーシャル・ネットワーキング・サービス)
など

【サーバとクライアント】
サービスを提供するのがサーバ
サーバが提供するサービスを受け取るのがクライアント

【静的なページと動的なページ】
静的なページ:ブラウザなどのクライアントやサーバの状態によらず、常に同じコンテンツを返す
動的なページ:ブラウザのリクエストの内容やサーバの状態によって返すページを毎回生成して返す

検索エンジンによって検索すると、毎回違うページになっていることが見られます。

1-2
【Webアプリケーションに必要なもの】
①WebアプリケーションはHTTPと呼ばれるプロトコルを利用して、サーバとクライアントとの通信を行う。
②Webクライアントはブラウザ
③Webアプリケーションの動かすにはアプリケーションサーバが必要
 (Webサーバとアプリケーションサーバが一緒なものもある)
 *Webサーバとは本来、HTTPサーバという

Webのプログラム
①URIを指定して実行
②プログラムは利用するユーザの情報をデータベースから参照/格納し、メールサーバと通信を行い、登録されたメールへ登録完了のメールを送信するなど行ったサービスを提供します(ショッピングなど)

【サーバサイド技術】
サーブレット
①オブジェクト指向言語
②マルチプラットフォーム

JSP

2012年5月19日土曜日

cosminxus

cosminxusでWebサーバを構築をするには、Javaだけの勉強では開発は不可能。
SOAの基礎知識などが必要。
サービス単位でアプリケーションを構築する必要がある。

最近、単なるJavaの教育では、SOAを構築するのは不可能。
今後、技術者の育成が必要。

2012年5月17日木曜日

IT教育レジュメの販売開始

IT教育用のレジュメのPDFダウンロードの販売を開始しました。
最初はJavaの基本
  1. プログラム基礎
  2. Java基礎文法
  3. 変数
  4. 演算子
  5. 制御文
2回目以降の予定
Java基礎2 オブジェクト指向
Java基礎3 ファイル処理などのAPIの利用
データベース基礎 データベースおよびSQL
Webプログラミング基礎 Webプログラミング基礎およびHTML
Java応用1 サーブレットとJSP
Java応用2 サーブレットとJSPとデータベースの接続

Java演習講座1 顧客管理の作成
Java演習講座2 商品管理の作成
Java演習講座3 ショッピングサイトの作成

Java上級講座1 Struts
Java上級講座2 Spring