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

koyak [E-MAIL ADDRESS DELETED]
2009年 6月 18日 (木) 22:01:26 JST


坂巻さん

小谷です。

>これをやりたかったんです。やっぱり無理だったんですね。
>了解しました。

ああ、そうでしたか。
申し訳ないです。。。

>今後、これを対応する予定などはありますか?!。あるとうれしいな〜と
>思っております。

残念ながら現時点では対応予定はありません。
ちょっと人手が・・・というのが正直な状況です。
ごめんなさい!
(もちろん親切な方がソースコードを提供して下さる、なんてことがあれば
すぐにでも対応!となると思います)

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