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

kubo [E-MAIL ADDRESS DELETED]
2008年 11月 27日 (木) 14:07:42 JST


久保(jflute)です。

高井さん、こんにちは

Quillもリリースされたようなので、
DBFluteでITransactionSettingの実装クラスを生成するように
してみました。0.8.7のSNAPSHOTにて反映されています。
http://dbflute.sandbox.seasar.org/download/dbflute/dbflute-0.8.7.zip

また、既に「dbflute-nbasic-example」にて試していますので、
そちらで生成されたソースを確認することの可能です。
AllCommon.S2Dao.TxSettingというクラスがそれです。

torque.quillDataSourceNameを設定すると
DataSourceNameプロパティをオーバーライドするようになっています。

2008/11/23 koyak <[E-MAIL ADDRESS DELETED]>:
> 高井さん
>
> 小谷です。
>
>>最新のソースを落としてきて TransactionSetting を作成したら思い通りに動作
> してくれました。
>>トランザクションもちゃんと機能しました。
>
> おお!良かったです!!
> ご確認ありがとうございました。
>
>>DBFlute + Quill (1.0.13 のリリースお待ちしております) の最新版で開発を進
> めていこうと思います。
>
> 近いうちにリリースできたらと思います。
> 決まりましたらMLに流します。
>
> 2008/11/23 10:00 kubo <[E-MAIL ADDRESS DELETED]>:
>> 久保(jflute)です。
>>
>>> 0.8.6 リリースおつかれさまです。
>> ありがとうございます!
>>
>>> 基本的なアプリケーションならそれで十分そうなので。
>>> 必要に応じて利用者が extend したものを作って利用すると思いますし。
>> そうですね、TypicalTransactionSettingを参考に作成しようかと思います。
>> (多分小谷さんにレビューしてもらいますw)
>>
>> 今後もよろしくお願いします。
>>
>> 2008/11/23 高井朋幸 <[E-MAIL ADDRESS DELETED]>:
>>> 久保様
>>> 高井です。
>>>
>>> 0.8.6 リリースおつかれさまです。
>>>
>>>>>> ふと思ったのですが、ITransactionSetting の簡単な実装も DBFlute で自動生
>>>>>> 成されると、利用する DB ごとに ITransactionSetting の実装クラスを作る手
>>>>>> 間が省けるのでもっと良いのですが、どうでしょう?
>>>>>
>>>>> 似たようなこと考えてました。ありがとうございます。
>>>>> 複数DB利用時には無いとつらいと思うので。
>>>>> サブクラスでの実装イメージがまだ湧いてないですが、
>>>>> そんなに難しくはないと思うので検討してみます。
>>>
>>> Seasar .net の quill 説明に載っているサンプルコード程度で
>>> いいのかなと自分なりに思っていたりします。
>>> 基本的なアプリケーションならそれで十分そうなので。
>>> 必要に応じて利用者が extend したものを作って利用すると思いますし。
>>> と直感的に思ったのですが、もっと良い方法があったりして…。
>>>
>>>>> ただ、0.8.6は既にリリースラインに乗せてしまったので、
>>>>> やるとなればさらに次の0.8.7となりますのでご了承下さい。
>>>
>>> 全然問題ないですよ。
>>> いろいろとありがとうございます。
>>>
>>>
>>>> 久保(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 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 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


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