久保(jflute)です。<div><br></div><div>こちらの件、小谷さんの方で調査を行い、</div><div>修正が予定されています。</div><div>取り急ぎ自分の方から通知させて頂きます。</div><div><br></div><div>JIRAの方にも書いてありますが、</div><div><span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 12px; ">TypicalTransactionSettingの実装での不備で、</span></div>
<div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;">現象が発生しておりました。</span></font></div><div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;">こちら修正予定です。次のバージョンにて反映されます。</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;"><br></span></font></div><div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;"><span class="Apple-style-span" style="font-family: arial; font-size: small; "><div>
<font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px; ">また、DBFluteのTxSettingもTypicalTransactionSettingを</span></font></div><div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px; ">参考にしていたので全く同じ現象が発生するため修正しました。</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px; ">修正は次のバージョンにて反映されます。</span></font></div><div><font class="Apple-style-span" size="3"><span class="Apple-style-span" style="font-size: 12px;"><br>
</span></font></div></span></span></font></div><div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;">そして、このクラスは、内部で利用するものではなく、</span></font></div><div>
<font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;">「Quillが提供するTransactionSettingのプロトタイプ」</span></font></div><div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;">ということなので、アプリの方で独自のTransactionSettingを</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;">作成して利用すれば、この問題は回避できます。</span></font></div><div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;">(つまり、古いQuillのバージョンでも回避可能)</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;"><br></span></font></div><div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;">DBFlute.NETのSVNリポジトリに</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;">「dfnet-multipledb-quill-example」</span></font></div><div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;">を作成しました(小谷さん協力ありがとう)。</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;">まだまだ作り途中ではありますが、複数DBやられる方には</span></font></div><div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;">参考になるかと思います。ぜひご覧下さい。</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 12px;"><a href="https://www.seasar.org/svn/sandbox/dbflute.net/trunk/dfnet-multipledb-quill-example">https://www.seasar.org/svn/sandbox/dbflute.net/trunk/dfnet-multipledb-quill-example</a></span></font></div>
<div><br><div class="gmail_quote">2009/6/18 koyak <span dir="ltr">&lt;<a href="mailto:keikotani926@gmail.com">keikotani926@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
坂巻さん<br>
<br>
小谷です。<br>
<div class="im"><br>
&gt; また、DB1,DB2それぞれを更新して<br>
&gt; どちらか片方がエラーとなった場合に<br>
&gt; 両方ともロールバック、という処理<br>
<br>
</div>この機能に完全に対応することは難しいのですが、<br>
複数データソース+トランザクションについては<br>
最低限、かち合わずに独立して実行できるよう<br>
検討してみようと思います。<br>
<br>
JIRAの方にも登録しました。<br>
<a href="https://www.seasar.org/issues/browse/CONTAINERNET-127" target="_blank">https://www.seasar.org/issues/browse/CONTAINERNET-127</a><br>
<br>
フィードバックありがとうございました。<br>
<br>
2009/06/18 22:01 に koyak&lt;<a href="mailto:keikotani926@gmail.com">keikotani926@gmail.com</a>&gt; さんは書きました:<br>
<div><div></div><div class="h5">&gt; 坂巻さん<br>
&gt;<br>
&gt; 小谷です。<br>
&gt;<br>
&gt;&gt;これをやりたかったんです。やっぱり無理だったんですね。<br>
&gt;&gt;了解しました。<br>
&gt;<br>
&gt; ああ、そうでしたか。<br>
&gt; 申し訳ないです。。。<br>
&gt;<br>
&gt;&gt;今後、これを対応する予定などはありますか?!。あるとうれしいな~と<br>
&gt;&gt;思っております。<br>
&gt;<br>
&gt; 残念ながら現時点では対応予定はありません。<br>
&gt; ちょっと人手が・・・というのが正直な状況です。<br>
&gt; ごめんなさい!<br>
&gt; (もちろん親切な方がソースコードを提供して下さる、なんてことがあれば<br>
&gt; すぐにでも対応!となると思います)<br>
&gt;<br>
&gt; Java版のSeasarでは確か二相コミットの仕組みが実装されていたはずなので<br>
&gt; そちらを参考にできれば可能だとは思いますが。。。<br>
&gt;<br>
&gt; Transaction属性を使わずに、複数データソースでのトランザクション管理に<br>
&gt; 対応したInterceptorを自作。<br>
&gt; →Aspect属性に設定する<br>
&gt; などしていただくやり方が現時点では一番の近道かと思われます。<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 2009/06/18 10:05 に masami sakamaki&lt;<a href="mailto:masas@masas.jp">masas@masas.jp</a>&gt; さんは書きました:<br>
&gt;&gt; 小谷さん<br>
&gt;&gt; はじめまして。<br>
&gt;&gt;<br>
&gt;&gt;&gt; また、DB1,DB2それぞれを更新して<br>
&gt;&gt;&gt; どちらか片方がエラーとなった場合に<br>
&gt;&gt;&gt; 両方ともロールバック、という処理は現バージョンでは対応しておりません。<br>
&gt;&gt;<br>
&gt;&gt; これをやりたかったんです。やっぱり無理だったんですね。<br>
&gt;&gt; 了解しました。<br>
&gt;&gt;<br>
&gt;&gt; 今後、これを対応する予定などはありますか?!。あるとうれしいな~と<br>
&gt;&gt; 思っております。<br>
&gt;&gt;<br>
&gt;&gt; 今後も、よろしくお願いいたします。<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; -----Original Message-----<br>
&gt;&gt; From: <a href="mailto:seasar-dotnet-bounces@ml.seasar.org">seasar-dotnet-bounces@ml.seasar.org</a><br>
&gt;&gt; [mailto:<a href="mailto:seasar-dotnet-bounces@ml.seasar.org">seasar-dotnet-bounces@ml.seasar.org</a>] On Behalf Of koyak<br>
&gt;&gt; Sent: Thursday, June 18, 2009 1:31 AM<br>
&gt;&gt; To: <a href="mailto:seasar-dotnet@ml.seasar.org">seasar-dotnet@ml.seasar.org</a><br>
&gt;&gt; Subject: [seasar-dotnet:1389] Re: 複数データソースを試していますがうまくいき<br>
&gt;&gt; ません<br>
&gt;&gt;<br>
&gt;&gt; 坂巻さん<br>
&gt;&gt;<br>
&gt;&gt; 初めまして。<br>
&gt;&gt; 小谷です。<br>
&gt;&gt;<br>
&gt;&gt;&gt; こんな感じでやってみましたら、SelectDB1のところで<br>
&gt;&gt;&gt; 「表が見つかりません」というエラーになりました。<br>
&gt;&gt;<br>
&gt;&gt; DB2の方のデータソースを見に行っています。<br>
&gt;&gt; そのため、DB1のテーブルが見つからず「表が見つかりません」と<br>
&gt;&gt; なっていると思われます。<br>
&gt;&gt;<br>
&gt;&gt; 恥ずかしながら状況をまだ把握できていないのですが、<br>
&gt;&gt;<br>
&gt;&gt; 単純にDB1、DB2それぞれに接続してSQLを発行するのであれば<br>
&gt;&gt; [Transaction(typeof(DB1.TxSetting))]<br>
&gt;&gt; public void Method1 {<br>
&gt;&gt;    SelectDB1<br>
&gt;&gt;    UpdateDB1<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt; [Transaction(typeof(DB2.TxSetting))]<br>
&gt;&gt; public void Method2 {<br>
&gt;&gt;    SelectDB2<br>
&gt;&gt;    UpdateDB2<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt; というようにデータソースごとにメソッドを分けて試してみて<br>
&gt;&gt; いただけないでしょうか。<br>
&gt;&gt;<br>
&gt;&gt; また、DB1,DB2それぞれを更新して<br>
&gt;&gt; どちらか片方がエラーとなった場合に<br>
&gt;&gt; 両方ともロールバック、という処理は現バージョンでは対応しておりません。<br>
&gt;&gt;<br>
&gt;&gt; その他、S2Dao属性(DBFluteが生成しているDaoの中に設定されているはずです)で<br>
&gt;&gt; 指定している接続先と、<br>
&gt;&gt; Transaction属性で指定している接続先は<br>
&gt;&gt; 必ず一致させる必要があります。<br>
&gt;&gt; Aというデータソースに対するトランザクションの場合、<br>
&gt;&gt; そのトランザクションの中で接続するのは<br>
&gt;&gt; Aだけにして下さい。<br>
&gt;&gt; (一致していない場合はトランザクションがきかなかったり<br>
&gt;&gt; SQLの実行に失敗したりする可能性があります)<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; もう一つ、Transaction属性を引数なしで指定した場合、<br>
&gt;&gt; デフォルトのデータソース(設定ファイルで先頭に定義されているデータソース)を<br>
&gt;&gt; 見に行きます。<br>
&gt;&gt;<br>
&gt;&gt; ご了承下さい。<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; 2009/06/18 0:20 に masami sakamaki&lt;<a href="mailto:masas@masas.jp">masas@masas.jp</a>&gt; さんは書きました:<br>
&gt;&gt;&gt; はじめまして。坂巻と申します。<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 複数データソースについて、以前話題があったと思いますが<br>
&gt;&gt;&gt; 同じことをしてみて、うまくいかないので質問させてください。<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 動作環境は<br>
&gt;&gt;&gt;  DB:Oracle<br>
&gt;&gt;&gt;  Framework:.NET 3.5<br>
&gt;&gt;&gt;  DBFlute:0.8.8<br>
&gt;&gt;&gt;  S2Dao:1.3.13.0<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; データベースはDB1とDB2があります。その設定はQuillに適切に<br>
&gt;&gt;&gt; 行いました。<br>
&gt;&gt;&gt; また、それぞれのDBFluteの生成も行いました。<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Transaction属性を指定しない場合、DB1とDB2のそれぞれのEntity<br>
&gt;&gt;&gt; に対しSelect(Entity)やUpdateすることは出来ました。<br>
&gt;&gt;&gt; また[Transaction]だけで、Transaction属性を指定したら<br>
&gt;&gt;&gt; トランザクションが聞いていないようです。<br>
&gt;&gt;&gt; (Update後にExceptionが発生してもRollbackしなかった)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 今度はTxSettingを指定してみました。<br>
&gt;&gt;&gt; (トランザクション属性は単一しか使えないので、メソッドをネスト<br>
&gt;&gt;&gt; して、トランザクション属性を2段でやりました)<br>
&gt;&gt;&gt; コードのイメージは下記<br>
&gt;&gt;&gt; (Method1およびMethod2ともにAOPがかかるメソッドです)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; [Transaction(typeof(DB1.TxSetting))]<br>
&gt;&gt;&gt; public void Method1()<br>
&gt;&gt;&gt; {<br>
&gt;&gt;&gt;  Method2();<br>
&gt;&gt;&gt; }<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; [Transaction(typeof(DB2.TxSetting))]<br>
&gt;&gt;&gt; public void Method2()<br>
&gt;&gt;&gt; {<br>
&gt;&gt;&gt;  SelectDB2<br>
&gt;&gt;&gt;  SelectDB1<br>
&gt;&gt;&gt;  UpdateDB2<br>
&gt;&gt;&gt;  UpdateDB1<br>
&gt;&gt;&gt; }<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; こんな感じでやってみましたら、SelectDB1のところで<br>
&gt;&gt;&gt; 「表が見つかりません」というエラーになりました。<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; この様子から、トランザクションをネストした場合、後の<br>
&gt;&gt;&gt; トランザクションのデータベースしか見えていないようですが<br>
&gt;&gt;&gt; 他に何か設定などは必要でしょうか?!。<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; ご指導いただければ幸いです。<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; seasar-dotnet mailing list<br>
&gt;&gt;&gt; <a href="mailto:seasar-dotnet@ml.seasar.org">seasar-dotnet@ml.seasar.org</a><br>
&gt;&gt;&gt; <a href="https://ml.seasar.org/mailman/listinfo/seasar-dotnet" target="_blank">https://ml.seasar.org/mailman/listinfo/seasar-dotnet</a><br>
&gt;&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; seasar-dotnet mailing list<br>
&gt;&gt; <a href="mailto:seasar-dotnet@ml.seasar.org">seasar-dotnet@ml.seasar.org</a><br>
&gt;&gt; <a href="https://ml.seasar.org/mailman/listinfo/seasar-dotnet" target="_blank">https://ml.seasar.org/mailman/listinfo/seasar-dotnet</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; seasar-dotnet mailing list<br>
&gt;&gt; <a href="mailto:seasar-dotnet@ml.seasar.org">seasar-dotnet@ml.seasar.org</a><br>
&gt;&gt; <a href="https://ml.seasar.org/mailman/listinfo/seasar-dotnet" target="_blank">https://ml.seasar.org/mailman/listinfo/seasar-dotnet</a><br>
&gt;&gt;<br>
&gt;<br>
_______________________________________________<br>
seasar-dotnet mailing list<br>
<a href="mailto:seasar-dotnet@ml.seasar.org">seasar-dotnet@ml.seasar.org</a><br>
<a href="https://ml.seasar.org/mailman/listinfo/seasar-dotnet" target="_blank">https://ml.seasar.org/mailman/listinfo/seasar-dotnet</a><br>
</div></div></blockquote></div><br></div>