[s2container-php5:141] Re: S2DaoをMSSQLでトランザクションではまっています
masami sakamaki
[E-MAIL ADDRESS DELETED]
2008年 10月 20日 (月) 10:21:26 JST
Kloveさん
自前で発行は私も発見しました。
ここで良い対策が見つからなければ、同じ方法で対処しようと思っておりました。
時間的には余裕があるので、もうしばらく待って(ここで他に良いアイデアが
出てくるのを待って)から対応しようおともいます。
-----Original Message-----
From: [E-MAIL ADDRESS DELETED]
[mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of klove
Sent: Friday, October 17, 2008 10:07 PM
To: [E-MAIL ADDRESS DELETED]
Subject: [s2container-php5:140] Re: S2DaoをMSSQLでトランザクションではまって
います
kloveです。
MSSQLを使用したことはないのですが、Zend_Dbのアダプタでは、
BEGIN TRANSACTIONを自前で発行しています。
http://framework.zend.com/code/browse/~raw,r=9101/Zend_Framework/trunk/libra
ry/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/o
rg/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 mailing list
[E-MAIL ADDRESS DELETED]
https://ml.seasar.org/mailman/listinfo/s2container-php5
S2Container-PHP5 メーリングリストの案内