[s2container-php5:140] Re: S2DaoをMSSQLでトランザクションではまっています

klove [E-MAIL ADDRESS DELETED]
2008年 10月 17日 (金) 22:06:59 JST


kloveです。
MSSQLを使用したことはないのですが、Zend_Dbのアダプタでは、
BEGIN TRANSACTIONを自前で発行しています。

http://framework.zend.com/code/browse/~raw,r=9101/Zend_Framework/trunk/library/Zend/Db/Adapter/Pdo/Mssql.php

    /**
     * Begin a transaction.
     *
     * It is necessary to override the abstract PDO transaction
functions here, as
     * the PDO driver for MSSQL does not support transactions.
     */
    protected function _beginTransaction()
    {
        $this->_connect();
        $this->_connection->exec('BEGIN TRANSACTION');
        return true;
    }

s2daoのS2Dao_AbstractTxInterceptorで
https://www.seasar.org/svn/s2dao.php5/tags/S2Dao.PHP5-1.1.2/src/s2dao.php5/org/seasar/extension/tx/S2Dao_AbstractTxInterceptor.class.php
  - connection->beginTransaction()
  - connection->commit()
  - connection->rollback()
をZend_Dbのようにexecで発行するように編集するとトランザクションが
効くのではないかと思います。(実際に試してないです。)
よろしくお願いいたします。

masami sakamaki さんは書きました:
> masasと申します。
> 
> S2DaoをMSSQLで使っていてトランザクションがうまく動かず困っています。
> 
> s2:1.2.0
> s2dao:1.1.2
> DBドライバ:pdo_dblib
> トランザクション: requiredTx
> 
> トランザクションをPointCutで指定して、そのメソッドを呼び出します。
> メソッドの中では、daoのインスタンスからinsertを2回行っています。
> 1回目のinsertは成功し、2回目のinsertは失敗するのですが
> (例外が発生し、PointCutしているメソッドでは例外処理は何もしていない)
> このとき、1回目のinsertの分がデータベースに入ってしまいます。
> 
> どうやらトランザクションが聞いていないように思われます。
> 
> よくよく見ていると
>     public final function hasTransaction() {
>      if($this->begin){
>             return $this->begin;
>         }
>         try {
>             $this->connection->beginTransaction();
>         } catch(Exception $e){
>             $this->begin = true;
>             return true;
>         }
>         return false;
>     }
>> $this->connection->beginTransaction();
> で例外が発生していました
> ('PDOException' with message 'This driver doesn't support transactions'
> in)
> これはDBのライブラリがbeginTransactionをサポートしていないのは
> 解るのですが、どなたか同じような経験とかで回避した方法などを
> ご存じでしたらアドバイスをいただけると助かります。
> 
> よろしくお願いいたします。
> 
> 
> _______________________________________________
> S2Container-PHP5 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/s2container-php5
> 



S2Container-PHP5 メーリングリストの案内