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

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


久保(jflute)です。

高井さん
先ほどDownloadして試してもらったのが、
そのまま正式リリースとなっていますので、
そのままご利用下さい。

2008/11/23 kubo <[E-MAIL ADDRESS DELETED]>:
> 久保(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 メーリングリストの案内