[seasar-dotnet:1212] Re: Quill で複数データソースでのトランザクション制御に失敗する

高井朋幸 [E-MAIL ADDRESS DELETED]
2008年 12月 9日 (火) 23:25:29 JST


小谷様
高井です。

お忙しい中返信ありがとうございます。
業務上ログや設定をそのままお見せできませんので、主要な部分をお伝えします。


> 1.XxxTxSettingのDataSourceNameと
>  _aaaBhv(aaaDao)で使われているXxxDaoSettingのDataSourceNameが
>  同じになっているか

同じになっています。
各 DB へのアクセスはトランザクションを無視すれば正常に行われます。


> 2.app.config(Seasar.Quill.dll.config)のquillセクションの内容
以下のように3つのデータソースが定義されています。
<quill>
 <datasources>
  <datasource name="DS1">
    sqlserver の接続情報
  </datasource>
  <datasource name="DS2">
    sqlserver2 の接続情報
  </datasource>
  <datasource name="DS3">
    sqlserver3 の接続情報
  </datasource>
 </datasources>
 <assemblys>
    読み込むアセンブリの記述
 </assemblys>
</quill>


> 3.ログにはデータソース名も出力されているはずなので
>  出力されているデータソース名

今ログが手元にないのでデータソース名を付加したログを記述します。
以下のように接続すべきデータソースからコネクションを取得できています。

---------------------- ログ抜粋 ------------------
- DataSourceName=DS1
- 論理的なコネクションを取得しました
- トランザクションを開始します
- MethodAaa Start
- # DBFlute のログが数行
- DataSourceName=DS1
- 論理的なコネクションを取得しました
- SQL ログ INSERT AaaTable .....
- 論理的なコネクションを閉じました
- DataSourceName=DS1
- MethodAaa End
- トランザクションをロールバックしました
- DataSourceName=DS1
- 論理的なコネクションを閉じました
-------------------------------------------------

よろしくお願いします。


> 高井さん
>
> 小谷です。
>
> 現在すぐに確認するのは難しい状態なので
> 調査するのはもう少し後になると思いますが、
> 以下の点について教えていただけますでしょうか。
>
> 1.XxxTxSettingのDataSourceNameと
>  _aaaBhv(aaaDao)で使われているXxxDaoSettingのDataSourceNameが
>  同じになっているか
>
> 2.app.config(Seasar.Quill.dll.config)のquillセクションの内容
>
> 3.ログにはデータソース名も出力されているはずなので
>  出力されているデータソース名
>
> よろしくお願いします。
>
> 2008/12/09 13:45 高井朋幸 <[E-MAIL ADDRESS DELETED]>:
>> 高井です。
>> お世話になっております。
>>
>>
>> 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 mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


-- 
Takai ICT 株式会社
高井朋幸 <[E-MAIL ADDRESS DELETED]>
TEL: 090-6192-6789



seasar-dotnet メーリングリストの案内