|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectrobbie.dao.BaseDao
robbie.dao.x.XDao
robbie.dao.x.GeneralizedXDao
GeneralizedXDaoクラス。
XDaoは暗黙的なトランザクションで、そのメソッドが1トランザクションとして
実行されてしまいます。(ただし、CMTによるEJB内部では必ずしもそうでえはありません)
その結果、明示的にトランザクションを実装するためには、XDaoを継承した拡張Daoを
作成する必要がありました。
しかし、GeneralizedXDaoは拡張を行わなくても、明示的なトランザクションが実行できるように
BaseDaoのAPIをpublicにし、また使用するConnectionをメンバ変数として保持したものになります。
これによって、外部でJTAなどを使用して明示的なトランザクションを実装し、複数のDaoの
トランザクションの同期をとることも可能です。
以下が、コーディング例になります。
XDaoFactory factory = new XDaoFactory("etc/test-config.xml");
GeneralizedXDao dao = (GeneralizedXDao)factory.createDaoInstance("GeneralizedXDao");
try {
// Connectionの取得
dao.openConnection();
dao.setAutoCommit(false);
// パラメータMapの設定
Map params = new HashMap();
params.put("id", new Integer(4));
params.put("name", "EEE");
params.put("age", new Integer(4));
int count = dao.executeUpdate("test9", params);
if (count != 1) {
dao.rollback();
} else {
dao.commit();
}
System.out.println("updateCount=" + count);
} catch(Exception ex) {
try {
dao.rollback();
} catch(Exception ex2) {
}
throw ex;
} finally {
try {
// Connectionを閉じる
dao.closeConnection();
} catch(Exception ex) {
// 何もしない
}
}
上記のようにGeneralizedXDaoの場合には、コネクションのopen/close、および例外の
管理を行う必要がありますが、commit/rollbackを使用した柔軟な処理がサブクラスを
作成しなくても可能になります。
BaseDao,
XDao,
直列化された形式| フィールドの概要 |
| クラス robbie.dao.x.XDao から継承したフィールド |
CATCH_SQL_EXCEPTION_COUNT, exception, queryFactory, resource |
| コンストラクタの概要 | |
GeneralizedXDao()
|
|
| メソッドの概要 | |
void |
closeConnection()
GeneralizedXDaoが保持するConnectionをcloseします。 |
void |
commit()
GeneralizedXDaoが保持するConnection使用してトランザクションをコミットします。 |
java.util.List |
executeQuery(java.lang.String id,
java.lang.Object beans)
BaseDao#executeQuery(Query)をpublicにしました。 |
java.lang.Object[][] |
executeQueryForArray(java.lang.String id,
java.lang.Object beans)
BaseDao#executeQueryForArray(Query)をpublicにしました。 |
java.util.List |
executeQueryForBeans(java.lang.String id,
java.lang.Object beans)
BaseDao#executeQueryForBeans(Query)をpublicにしました。 |
java.util.List |
executeQueryForDynaBean(java.lang.String id,
java.lang.Object beans)
BaseDao#executeQueryForDynaBean(Query)をpublicにしました。 |
int |
executeUpdate(java.lang.String id,
java.lang.Object beans)
BaseDao#executeUpdate(Query)をpublicにしました。 |
boolean |
isClosed()
GeneralizedXDaoが保持するConnectionが閉じているか確認します。 |
void |
openConnection()
新規にデータベースコネクションをオープンします。 |
void |
rollback()
GeneralizedXDaoが保持するConnectionを使用してトランザクションをロールバックします。 |
void |
setAutoCommit(boolean isAutoCommit)
GeneralizedXDaoが保持するConnectionにオートコミットモードをセットします。 |
| クラス robbie.dao.x.XDao から継承したメソッド |
configure, getSQLException, query, queryForArray, queryForBeans, queryForDynaBean, release, setQueryFactory, setResource, update |
| クラス robbie.dao.BaseDao から継承したメソッド |
bindParameters, closeConnection, closeQuery, closeResultSet, closeStatement, commit, executeQuery, executeQueryForArray, executeQueryForBeans, executeQueryForDynaBean, executeUpdate, isClosed, openQuery, openStatement, rollback, setAutoCommit |
| クラス java.lang.Object から継承したメソッド |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| コンストラクタの詳細 |
public GeneralizedXDao()
| メソッドの詳細 |
public void openConnection()
throws java.sql.SQLException
java.sql.SQLException
public void closeConnection()
throws java.sql.SQLException
java.sql.SQLException
public boolean isClosed()
throws java.sql.SQLException
このAPIはCMT上では、うまく動作しない可能性があります。
java.sql.SQLException
public void setAutoCommit(boolean isAutoCommit)
throws java.sql.SQLException
isAutoCommit -
java.sql.SQLException
public void commit()
throws java.sql.SQLException
java.sql.SQLException
public void rollback()
throws java.sql.SQLException
java.sql.SQLException
public java.util.List executeQuery(java.lang.String id,
java.lang.Object beans)
throws java.sql.SQLException
id - queryのidbeans - パラメータとなるObjec(MapまたはJavaBeansまたはDynaBean)
java.sql.SQLExceptionBaseDao.executeQuery(java.sql.Connection, robbie.dao.Query)
public java.lang.Object[][] executeQueryForArray(java.lang.String id,
java.lang.Object beans)
throws java.sql.SQLException
id - queryのidbeans - パラメータとなるObject(MapまたはJavaBeansまたはDynaBean)
java.sql.SQLExceptionBaseDao.executeQueryForArray(java.sql.Connection, robbie.dao.Query)
public java.util.List executeQueryForBeans(java.lang.String id,
java.lang.Object beans)
throws java.sql.SQLException
id - queryのidbeans - パラメータObject(MapまたはJavaBeansまたはDynaBean)
java.sql.SQLExceptionBaseDao.executeQueryForBeans(java.sql.Connection, robbie.dao.Query)
public java.util.List executeQueryForDynaBean(java.lang.String id,
java.lang.Object beans)
throws java.sql.SQLException
id - queryのidbeans - パラメータObject(MapまたはJavaBeansまたはDynaBean)
java.sql.SQLExceptionBaseDao.executeQueryForDynaBean(java.sql.Connection, robbie.dao.Query)
public int executeUpdate(java.lang.String id,
java.lang.Object beans)
throws java.sql.SQLException
id - queryのidbeans - パラメータとなるObject(MapまたはJavaBeansまたはDynaBean)
java.sql.SQLExceptionBaseDao.executeUpdate(java.sql.Connection, robbie.dao.Query)
|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||