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

kubo [E-MAIL ADDRESS DELETED]
2008年 11月 23日 (日) 10:00:22 JST


久保(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 メーリングリストの案内