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

masami sakamaki [E-MAIL ADDRESS DELETED]
2009年 6月 18日 (木) 10:05:17 JST


小谷さん
はじめまして。

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