[seasar-dotnet:1393] Re: 複数データソースを試していますがうまくいきません

kubo [E-MAIL ADDRESS DELETED]
2009年 6月 24日 (水) 12:33:54 JST


久保(jflute)です。
こちらの件、小谷さんの方で調査を行い、
修正が予定されています。
取り急ぎ自分の方から通知させて頂きます。

JIRAの方にも書いてありますが、
TypicalTransactionSettingの実装での不備で、
現象が発生しておりました。
こちら修正予定です。次のバージョンにて反映されます。

また、DBFluteのTxSettingもTypicalTransactionSettingを
参考にしていたので全く同じ現象が発生するため修正しました。
修正は次のバージョンにて反映されます。

そして、このクラスは、内部で利用するものではなく、
「Quillが提供するTransactionSettingのプロトタイプ」
ということなので、アプリの方で独自のTransactionSettingを
作成して利用すれば、この問題は回避できます。
(つまり、古いQuillのバージョンでも回避可能)

DBFlute.NETのSVNリポジトリに
「dfnet-multipledb-quill-example」
を作成しました(小谷さん協力ありがとう)。
まだまだ作り途中ではありますが、複数DBやられる方には
参考になるかと思います。ぜひご覧下さい。
https://www.seasar.org/svn/sandbox/dbflute.net/trunk/dfnet-multipledb-quill-example

2009/6/18 koyak <[E-MAIL ADDRESS DELETED]>

> 坂巻さん
>
> 小谷です。
>
> > また、DB1,DB2それぞれを更新して
> > どちらか片方がエラーとなった場合に
> > 両方ともロールバック、という処理
>
> この機能に完全に対応することは難しいのですが、
> 複数データソース+トランザクションについては
> 最低限、かち合わずに独立して実行できるよう
> 検討してみようと思います。
>
> JIRAの方にも登録しました。
> https://www.seasar.org/issues/browse/CONTAINERNET-127
>
> フィードバックありがとうございました。
>
> 2009/06/18 22:01 に koyak<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > 坂巻さん
> >
> > 小谷です。
> >
> >>これをやりたかったんです。やっぱり無理だったんですね。
> >>了解しました。
> >
> > ああ、そうでしたか。
> > 申し訳ないです。。。
> >
> >>今後、これを対応する予定などはありますか?!。あるとうれしいな~と
> >>思っております。
> >
> > 残念ながら現時点では対応予定はありません。
> > ちょっと人手が・・・というのが正直な状況です。
> > ごめんなさい!
> > (もちろん親切な方がソースコードを提供して下さる、なんてことがあれば
> > すぐにでも対応!となると思います)
> >
> > Java版のSeasarでは確か二相コミットの仕組みが実装されていたはずなので
> > そちらを参考にできれば可能だとは思いますが。。。
> >
> > Transaction属性を使わずに、複数データソースでのトランザクション管理に
> > 対応したInterceptorを自作。
> > →Aspect属性に設定する
> > などしていただくやり方が現時点では一番の近道かと思われます。
> >
> >
> >
> > 2009/06/18 10:05 に masami sakamaki<[E-MAIL ADDRESS DELETED]> さんは書きました:
> >> 小谷さん
> >> はじめまして。
> >>
> >>> また、DB1,DB2それぞれを更新して
> >>> どちらか片方がエラーとなった場合に
> >>> 両方ともロールバック、という処理は現バージョンでは対応しておりません。
> >>
> >> これをやりたかったんです。やっぱり無理だったんですね。
> >> 了解しました。
> >>
> >> 今後、これを対応する予定などはありますか?!。あるとうれしいな~と
> >> 思っております。
> >>
> >> 今後も、よろしくお願いいたします。
> >>
> >>
> >> -----Original Message-----
> >> From: [E-MAIL ADDRESS DELETED]
> >> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of koyak
> >> Sent: Thursday, June 18, 2009 1:31 AM
> >> To: [E-MAIL ADDRESS DELETED]
> >> Subject: [seasar-dotnet:1389] Re: 複数データソースを試していますがうまくいき
> >> ません
> >>
> >> 坂巻さん
> >>
> >> 初めまして。
> >> 小谷です。
> >>
> >>> こんな感じでやってみましたら、SelectDB1のところで
> >>> 「表が見つかりません」というエラーになりました。
> >>
> >> DB2の方のデータソースを見に行っています。
> >> そのため、DB1のテーブルが見つからず「表が見つかりません」と
> >> なっていると思われます。
> >>
> >> 恥ずかしながら状況をまだ把握できていないのですが、
> >>
> >> 単純にDB1、DB2それぞれに接続してSQLを発行するのであれば
> >> [Transaction(typeof(DB1.TxSetting))]
> >> public void Method1 {
> >>    SelectDB1
> >>    UpdateDB1
> >> }
> >>
> >> [Transaction(typeof(DB2.TxSetting))]
> >> public void Method2 {
> >>    SelectDB2
> >>    UpdateDB2
> >> }
> >>
> >> というようにデータソースごとにメソッドを分けて試してみて
> >> いただけないでしょうか。
> >>
> >> また、DB1,DB2それぞれを更新して
> >> どちらか片方がエラーとなった場合に
> >> 両方ともロールバック、という処理は現バージョンでは対応しておりません。
> >>
> >> その他、S2Dao属性(DBFluteが生成しているDaoの中に設定されているはずです)で
> >> 指定している接続先と、
> >> Transaction属性で指定している接続先は
> >> 必ず一致させる必要があります。
> >> Aというデータソースに対するトランザクションの場合、
> >> そのトランザクションの中で接続するのは
> >> Aだけにして下さい。
> >> (一致していない場合はトランザクションがきかなかったり
> >> SQLの実行に失敗したりする可能性があります)
> >>
> >>
> >> もう一つ、Transaction属性を引数なしで指定した場合、
> >> デフォルトのデータソース(設定ファイルで先頭に定義されているデータソース)を
> >> 見に行きます。
> >>
> >> ご了承下さい。
> >>
> >>
> >>
> >> 2009/06/18 0:20 に masami sakamaki<[E-MAIL ADDRESS DELETED]> さんは書きました:
> >>> はじめまして。坂巻と申します。
> >>>
> >>> 複数データソースについて、以前話題があったと思いますが
> >>> 同じことをしてみて、うまくいかないので質問させてください。
> >>>
> >>> 動作環境は
> >>>  DB:Oracle
> >>>  Framework:.NET 3.5
> >>>  DBFlute:0.8.8
> >>>  S2Dao:1.3.13.0
> >>>
> >>> データベースはDB1とDB2があります。その設定はQuillに適切に
> >>> 行いました。
> >>> また、それぞれのDBFluteの生成も行いました。
> >>>
> >>> Transaction属性を指定しない場合、DB1とDB2のそれぞれのEntity
> >>> に対しSelect(Entity)やUpdateすることは出来ました。
> >>> また[Transaction]だけで、Transaction属性を指定したら
> >>> トランザクションが聞いていないようです。
> >>> (Update後にExceptionが発生してもRollbackしなかった)
> >>>
> >>> 今度はTxSettingを指定してみました。
> >>> (トランザクション属性は単一しか使えないので、メソッドをネスト
> >>> して、トランザクション属性を2段でやりました)
> >>> コードのイメージは下記
> >>> (Method1およびMethod2ともにAOPがかかるメソッドです)
> >>>
> >>> [Transaction(typeof(DB1.TxSetting))]
> >>> public void Method1()
> >>> {
> >>>  Method2();
> >>> }
> >>>
> >>> [Transaction(typeof(DB2.TxSetting))]
> >>> public void Method2()
> >>> {
> >>>  SelectDB2
> >>>  SelectDB1
> >>>  UpdateDB2
> >>>  UpdateDB1
> >>> }
> >>>
> >>> こんな感じでやってみましたら、SelectDB1のところで
> >>> 「表が見つかりません」というエラーになりました。
> >>>
> >>> この様子から、トランザクションをネストした場合、後の
> >>> トランザクションのデータベースしか見えていないようですが
> >>> 他に何か設定などは必要でしょうか?!。
> >>>
> >>> ご指導いただければ幸いです。
> >>>
> >>>
> >>>
> >>> _______________________________________________
> >>> 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://ml.seasar.org/archives/seasar-dotnet/attachments/20090624/21089d1b/attachment.html>


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