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

koyak [E-MAIL ADDRESS DELETED]
2009年 6月 18日 (木) 23:02:41 JST


坂巻さん

小谷です。

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