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

koyak [E-MAIL ADDRESS DELETED]
2008年 11月 23日 (日) 15:17:57 JST


高井さん

小谷です。

>最新のソースを落としてきて 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 メーリングリストの案内