|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectrobbie.dao.BaseDao
robbie.dao.x.XDao
robbie.dao.x.StandaloneXDao
StandaloneXDaoクラス。
XDaoは暗黙的なトランザクションで、そのメソッドが1トランザクションとして
実行されてしまいます。(ただし、CMTによるEJB内部では必ずしもそうでえはありません)
その結果、明示的にトランザクションを実装するためには、XDaoを継承した拡張Daoを
作成する必要がありました。
しかし、StandaloneXDaoは拡張を行わなくても、明示的なトランザクションが実行できるように
BaseDaoの一部のAPIをpublicにしたものになります。
これによって、外部でJTAなどを使用して明示的なトランザクションを実装し、複数のDaoの
トランザクションの同期をとることも可能です。
以下が、コーディング例になります。
XDaoFactory factory = new XDaoFactory("etc/test-config.xml");
StandaloneXDao dao = (StandaloneXDao)factory.createDaoInstance("StandaloneXDao");
try {
// Connectionの取得
dao.openConnection();
// パラメータ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) {
// 何もしない
}
}
上記のようにStandaloneXDaoの場合には、コネクションのopen/close、および例外の
管理を行う必要がありますが、commit/rollbackを使用した柔軟な処理がサブクラスを
作成しなくても可能になります。
BaseDao,
XDao,
直列化された形式| フィールドの概要 |
| クラス robbie.dao.x.XDao から継承したフィールド |
exception, queryFactory, resource |
| コンストラクタの概要 | |
StandaloneXDao()
|
|
| メソッドの概要 | |
void |
closeConnection()
コネクションをクローズする。 |
void |
commit()
コミットする。 |
java.util.List |
executeQuery(java.lang.String id,
java.util.Map params)
BaseDao#executeQuery(Query)をpublicにしました。 |
java.lang.Object[][] |
executeQueryForArray(java.lang.String id,
java.util.Map params)
BaseDao#executeQueryForArray(Query)をpublicにしました。 |
java.util.List |
executeQueryForBeans(java.lang.String id,
java.util.Map params,
java.lang.Class beanClass)
BaseDao#executeQueryForBeans(Query, Class)をpublicにしました。 |
int |
executeUpdate(java.lang.String id,
java.util.Map params)
BaseDao#executeUpdate(Query)をpublicにしました。 |
int |
executeUpdate(java.lang.String id,
java.lang.Object bean)
BaseDao#executeUpdate(Query)をpublicにしました。 |
boolean |
isClosed()
コネクションが開いているかどうかをチェックします。 |
void |
openConnection()
新規にデータベースコネクションをオープンします。 |
void |
rollback()
ロールバックする。 |
void |
setAutoCommit(boolean isAutoCommit)
AutoCommitモードをセットします。 |
| クラス robbie.dao.x.XDao から継承したメソッド |
configure, getSQLException, query, queryForArray, queryForBeans, setQueryFactory, setResource, update, update |
| クラス robbie.dao.BaseDao から継承したメソッド |
bindParameters, closeQuery, closeResultSet, closeStatement, executeQuery, executeQueryForArray, executeQueryForBeans, executeUpdate, getConnection, openQuery, openStatement, setConnection |
| クラス java.lang.Object から継承したメソッド |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| コンストラクタの詳細 |
public StandaloneXDao()
| メソッドの詳細 |
public void openConnection()
throws java.sql.SQLException
java.sql.SQLException
public void closeConnection()
throws java.sql.SQLException
BaseDao の記述:
BaseDao 内の closeConnectionjava.sql.SQLException
public boolean isClosed()
throws java.sql.SQLException
BaseDao の記述: JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。
BaseDao 内の isClosedjava.sql.SQLException
public void setAutoCommit(boolean isAutoCommit)
throws java.sql.SQLException
BaseDao の記述: JDBCの仕様では、Connectionを取得した際には、デフォルトでAutoCommitモードが trueになります。したがって、複雑なトランザクション処理を行ない、 ロールバック、コミットを多用する場合には、あらかじめオートコミットを falseに設定しておく必要があります。
また、JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。
BaseDao 内の setAutoCommitisAutoCommit - 有効にする場合にはtrue
java.sql.SQLException
public void commit()
throws java.sql.SQLException
BaseDao の記述: JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。
BaseDao 内の commitjava.sql.SQLException
public void rollback()
throws java.sql.SQLException
BaseDao の記述: JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。
BaseDao 内の rollbackjava.sql.SQLException
public java.util.List executeQuery(java.lang.String id,
java.util.Map params)
throws java.sql.SQLException
id - queryのidparams - パラメータMap
java.sql.SQLExceptionBaseDao.executeQuery(robbie.dao.Query)
public java.lang.Object[][] executeQueryForArray(java.lang.String id,
java.util.Map params)
throws java.sql.SQLException
id - queryのidparams - パラメータMap
java.sql.SQLExceptionBaseDao.executeQueryForArray(robbie.dao.Query)
public java.util.List executeQueryForBeans(java.lang.String id,
java.util.Map params,
java.lang.Class beanClass)
throws java.sql.SQLException
id - queryのidparams - パラメータMap
java.sql.SQLExceptionBaseDao.executeQueryForBeans(robbie.dao.Query, Class)
public int executeUpdate(java.lang.String id,
java.util.Map params)
throws java.sql.SQLException
id - queryのidparams - パラメータMap
java.sql.SQLExceptionBaseDao.executeUpdate(robbie.dao.Query)
public int executeUpdate(java.lang.String id,
java.lang.Object bean)
throws java.sql.SQLException
id - queryのidbean - パラメータとなるJavaBean
java.sql.SQLExceptionBaseDao.executeUpdate(robbie.dao.Query)
|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||