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

kubo [E-MAIL ADDRESS DELETED]
2008年 11月 23日 (日) 01:53:50 JST


久保(jflute)です。

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

似たようなこと考えてました。ありがとうございます。
複数DB利用時には無いとつらいと思うので。
サブクラスでの実装イメージがまだ湧いてないですが、
そんなに難しくはないと思うので検討してみます。

ただ、0.8.6は既にリリースラインに乗せてしまったので、
やるとなればさらに次の0.8.7となりますのでご了承下さい。

2008/11/22 takai <[E-MAIL ADDRESS DELETED]>:
> 小谷様
> 久保(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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


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