[seasar-dotnet:1210] Quill で複数データソースでのトランザクション制御に失敗する
高井朋幸
[E-MAIL ADDRESS DELETED]
2008年 12月 9日 (火) 13:45:42 JST
高井です。
お世話になっております。
Quill+DBFlute の Windows アプリでインスタンスもスキーマの異なる複数のDBに
接続する環境下でトランザクションの制御に失敗します。
もしかすると単数DBでも datasource name="" の name 属性を使うと起きるかも
しれません。
確認していただけると幸いです。
ADO でベタなコードを書いて実行してみたところ正常にトランザクションが制御さ
れたので環境回りは大丈夫だと思います。
Transaction 属性をつけたメソッド内で DBFlute の Bhv を呼んで更新する処理が
あるのですが、ログにはトランザクションの開始とロールバックが記述されている
のに、実際のテーブルにはデータが書き込まれたままになってしまいます (下記参照)
。
XxxTxSetting は DBFlute で生成されたままで LocalRequiredTxHandler が利用さ
れています。
このメソッドでは1つのデータベースにしかアクセスされません。
SQL 実行前にもう一度コネクションを取得しているログが気になります。
ここで最初にトランザクションを作り出したコネクションと違うコネクションが割
り当てられているのではないかと思いました。
ブレークポイントを利用し SQL の実行直後にコミット・ロールバックする前で
停止してテーブルのデータを見たところデータが入っていました。
それからもトランザクション制御されていないコネクションが利用されているよう
な感じでした。
----------------------- コード -------------------
protected AaaBhv _aaaBhv;
[Transaction(XxxTxSetting)]
public virtual void MethodAaa() {
Logger.Info("MethodAaa Start");
try {
Aaa aaaEntity = CreateAaaEntity();
_aaaBhv.Insert(aaaEntity);
throw new Exception("test");
} finally {
Logger.Info("MethodAaa End");
}
}
---------------------- ログ抜粋 ------------------
- 論理的なコネクションを取得しました
- トランザクションを開始します
- MethodAaa Start
- # DBFlute のログが数行
- 論理的なコネクションを取得しました
- SQL ログ INSERT AaaTable .....
- 論理的なコネクションを閉じました
- MethodAaa End
- トランザクションをロールバックしました
- 論理的なコネクションを閉じました
-------------------------------------------------
よろしくお願いいたします。
seasar-dotnet メーリングリストの案内