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

masami sakamaki [E-MAIL ADDRESS DELETED]
2008年 10月 16日 (木) 11:43:37 JST


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 メーリングリストの案内