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

高井朋幸 [E-MAIL ADDRESS DELETED]
2008年 11月 23日 (日) 09:21:50 JST


久保様
高井です。

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