robbie.dao.x
クラス StandaloneXDao

java.lang.Object
  拡張robbie.dao.BaseDao
      拡張robbie.dao.x.XDao
          拡張robbie.dao.x.StandaloneXDao
すべての実装インタフェース:
java.io.Serializable

public class StandaloneXDao
extends XDao

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
 

コンストラクタの詳細

StandaloneXDao

public StandaloneXDao()
メソッドの詳細

openConnection

public void openConnection()
                    throws java.sql.SQLException
新規にデータベースコネクションをオープンします。

例外:
java.sql.SQLException

closeConnection

public void closeConnection()
                     throws java.sql.SQLException
クラス BaseDao の記述:
コネクションをクローズする。

オーバーライド:
クラス BaseDao 内の closeConnection
例外:
java.sql.SQLException

isClosed

public boolean isClosed()
                 throws java.sql.SQLException
クラス BaseDao の記述:
コネクションが開いているかどうかをチェックします。

JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。

オーバーライド:
クラス BaseDao 内の isClosed
戻り値:
Connectionがオープンしていたらtrue
例外:
java.sql.SQLException

setAutoCommit

public void setAutoCommit(boolean isAutoCommit)
                   throws java.sql.SQLException
クラス BaseDao の記述:
AutoCommitモードをセットします。

JDBCの仕様では、Connectionを取得した際には、デフォルトでAutoCommitモードが trueになります。したがって、複雑なトランザクション処理を行ない、 ロールバック、コミットを多用する場合には、あらかじめオートコミットを falseに設定しておく必要があります。

また、JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。

オーバーライド:
クラス BaseDao 内の setAutoCommit
パラメータ:
isAutoCommit - 有効にする場合にはtrue
例外:
java.sql.SQLException

commit

public void commit()
            throws java.sql.SQLException
クラス BaseDao の記述:
コミットする。

JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。

オーバーライド:
クラス BaseDao 内の commit
例外:
java.sql.SQLException

rollback

public void rollback()
              throws java.sql.SQLException
クラス BaseDao の記述:
ロールバックする。

JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。

オーバーライド:
クラス BaseDao 内の rollback
例外:
java.sql.SQLException

executeQuery

public java.util.List executeQuery(java.lang.String id,
                                   java.util.Map params)
                            throws java.sql.SQLException
BaseDao#executeQuery(Query)をpublicにしました。

パラメータ:
id - queryのid
params - パラメータMap
戻り値:
MapのList
例外:
java.sql.SQLException
関連項目:
BaseDao.executeQuery(robbie.dao.Query)

executeQueryForArray

public java.lang.Object[][] executeQueryForArray(java.lang.String id,
                                                 java.util.Map params)
                                          throws java.sql.SQLException
BaseDao#executeQueryForArray(Query)をpublicにしました。

パラメータ:
id - queryのid
params - パラメータMap
戻り値:
問い合わせ結果の2次元配列
例外:
java.sql.SQLException
関連項目:
BaseDao.executeQueryForArray(robbie.dao.Query)

executeQueryForBeans

public java.util.List executeQueryForBeans(java.lang.String id,
                                           java.util.Map params,
                                           java.lang.Class beanClass)
                                    throws java.sql.SQLException
BaseDao#executeQueryForBeans(Query, Class)をpublicにしました。

パラメータ:
id - queryのid
params - パラメータMap
戻り値:
JavaBeansのList
例外:
java.sql.SQLException
関連項目:
BaseDao.executeQueryForBeans(robbie.dao.Query, Class)

executeUpdate

public int executeUpdate(java.lang.String id,
                         java.util.Map params)
                  throws java.sql.SQLException
BaseDao#executeUpdate(Query)をpublicにしました。

パラメータ:
id - queryのid
params - パラメータMap
戻り値:
更新件数
例外:
java.sql.SQLException
関連項目:
BaseDao.executeUpdate(robbie.dao.Query)

executeUpdate

public int executeUpdate(java.lang.String id,
                         java.lang.Object bean)
                  throws java.sql.SQLException
BaseDao#executeUpdate(Query)をpublicにしました。

パラメータ:
id - queryのid
bean - パラメータとなるJavaBean
戻り値:
更新件数
例外:
java.sql.SQLException
関連項目:
BaseDao.executeUpdate(robbie.dao.Query)