[seasar-dotnet:1177] Re: [DBFlute] 複数データソースに関して

takai [E-MAIL ADDRESS DELETED]
2008年 11月 22日 (土) 23:57:19 JST


小谷様
久保(jflute)様
高井です。

対応ありがとうございます。
最新のソースを落としてきて TransactionSetting を作成したら思い通りに動作
してくれました。
トランザクションもちゃんと機能しました。

DBFlute + Quill (1.0.13 のリリースお待ちしております) の最新版で開発を進
めていこうと思います。

ふと思ったのですが、ITransactionSetting の簡単な実装も DBFlute で自動生
成されると、利用する DB ごとに ITransactionSetting の実装クラスを作る手
間が省けるのでもっと良いのですが、どうでしょう?


> 高井さん
> 
> 小谷です。
> 
> 検証ありがとうございます。
> お知らせいただいた下記のコード&現象についてですが
> >  bhv1.SelectList(cond1);
> >  bhv2.SelectList(cond2);
> >  bhv1.SelectList(cond1);
> >  bhv2.SelectList(cond2);  // ここまでは正常終了
> >  logic.SelectList(cond1); // Transaction を使うと SQL エラー
> >
> > となりますが、以下のようにすると動きます、
> >
> > ...
> >  bhv1.SelectList(cond1);
> >  bhv2.SelectList(cond2);
> >  bhv1.SelectList(cond1);
> >  bhv2.SelectList(cond2);
> >  bhv1.SelectList(cond1);
> >  logic.SelectList(cond1); // 直前の DS が利用されるので動く
> 
> 確かにトランザクションのデータソースを取得するタイミングの都合上
> (S2DaoInterceptorよりも前にTransactionInterceptorが呼ばれる)、
> 直前に使われたデータソースでトランザクションを発行しようと
> してしまっていますね。
> 
> 対策として臨時にITransactionSetting(トランザクション設定クラス)に
> プロパティ「DataSourceName」を追加し、
> Transactionがかかる前にもDataSourceNameが変更されるように
> コードを変更しました。
> 
> Subversionから最新(revision=1055)のソースを取得し、コンパイルしたDLL
>> DaoSettingと同じ要領でDataSourceNameを返す
> TransactionSettingを作成
>> logic.SelectListで使っているTransaction属性に
> 作成したTransactionSettingのTypeを渡す
> 
> という修正をお手数ですが試していただけないでしょうか。
> (データソース名はトランザクション側とbhv側で揃えるようにして下さい)
> 
> もしそれでもエラーが発生するようでしたら
> 例外クラス(SQLExceptionだと思いますがInnerExceptionがある場合はそれも)
> 例外メッセージ
> 例外発生箇所
> も差し支えない範囲で教えていただけたらと思います。
> 
> 2008/11/22 18:01 kubo <[E-MAIL ADDRESS DELETED]>:
> > 久保(jflute)です。
> >
> > ご報告ありがとうございます。
> > このままリリースしますね。
> >
> >
> >> Transaction をかけなければ正常に動作することが確認できました。
> >> ログの方も必要な時に必要なデータソースが設定されているようです。
> >
> > あとは残りはこっちの問題ですかぁ。。。
> > Quillのトランザクション周りの問題かもしれませんね。
> >
> >
> > 2008/11/22 takai <[E-MAIL ADDRESS DELETED]>:
> >> 久保(jflute)様
> >> 高井です。
> >>
> >> quillDataSourceName 対応ありがとうございます。
> >> 早速試してみたところ、DataSourceName プロパティが設定されていてしっかり
> >> 動いてくれました。
> >>
> >>
> >>> 久保(jflute)です。
> >>>
> >>> 高井さん
> >>>
> >>> Quillの方が(実は!?)既に固定データソースに対応しているようなので、
> >>> DBFluteのquillDataSourceName実装しました。
> >>> (実際に利いてない問題はありますがQuill側の話のようなので)
> >>>
> >>> http://dbflute.sandbox.seasar.org/contents/migration/basic.html
> >>>
> >>> こちらも
> >>> 「0.6.5においてまだ未実装」を
> >>> 「0.6.5においてまだ未実装→0.8.6より実装」に
> >>> 変更しております。
> >>>
> >>> 0.8.6は
> >>> http://dbflute.sandbox.seasar.org/contents/migration/basic.html
> >>> からダウンロード可能です。
> >>> またリリース前のSNAPSHOTではありますが、
> >>> これで特に問題なければそのままリリース準備に入りたいと思います。
> >>>
> >>>
> >>> 2008/11/22 takai <[E-MAIL ADDRESS DELETED]>:
> >>> > 小谷様
> >>> > 高井です。
> >>> >
> >>> > 早速の対応とデータソース切り替えの解説ありがとうございます。
> >>> > 手元に環境がないため PostgreSQL で動く簡単な環境を作ってスナップショット
> >>> > の動作確認してみました。
> >>> >
> >>> > Transaction をかけなければ正常に動作することが確認できました。
> >>> > ログの方も必要な時に必要なデータソースが設定されているようです。
> >>> > 1.0.12 では Transaction 属性にかかわらずデータソースが切り替わらなかった
> >>> > のですが、何かそのあたりも修正されました?(されてないようなら私の設定ミ
> >>> > スだったのかも)
> >>> >
> >>> > ただ、Transaction 属性を利用したメソッドを呼び出すとうまく切り替わってく
> >>> > れないみたいです。
> >>> > Transaction 属性を利用したクラスのメソッド内で、そのクラスのフィールドに
> >>> > Quill で設定された Bhv が呼び出されると前に利用されたデータソースが強制
> >>> > 的に設定されてしまうようです。
> >>> > ログにはやはり正しいデータソースが設定されているように出力されます。
> >>> >
> >>> > 以下のようなコードで、ロジックの実装クラス内部で DS1 へアクセスする Bhv
> >>> > を利用していて、ロジック実装クラスに Transaction 属性をかけてあります。
> >>> >
> >>> > protected IXxxLogic logic; // これの実装クラスに [Transaction]
> >>> > protected Ds1Bhv bhv1;
> >>> > protected Ds2Bhv bhv2;
> >>> >
> >>> > ...
> >>> >  bhv1.SelectList(cond1);
> >>> >  bhv2.SelectList(cond2);
> >>> >  bhv1.SelectList(cond1);
> >>> >  bhv2.SelectList(cond2);  // ここまでは正常終了
> >>> >  logic.SelectList(cond1); // Transaction を使うと SQL エラー
> >>> > ...
> >>> >
> >>> > となりますが、以下のようにすると動きます、
> >>> >
> >>> > ...
> >>> >  bhv1.SelectList(cond1);
> >>> >  bhv2.SelectList(cond2);
> >>> >  bhv1.SelectList(cond1);
> >>> >  bhv2.SelectList(cond2);
> >>> >  bhv1.SelectList(cond1);
> >>> >  logic.SelectList(cond1); // 直前の DS が利用されるので動く
> >>> > ...
> >>> >
> >>> >
> >>> > Transaction 属性の処理に問題がありそうな気がします。
> >>> > ちなみに、2相コミットは考えていないので今のところは必要ありません。
> >>> >
> >>> > 引き続きよろしくお願いします。
> >>> >
> >>> >
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet



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