[seasar-dotnet:2275] Re: Quill、DBFluteでの同一DB、複数スキーマ、同一テーブル構造での接続について

志水正幸 [E-MAIL ADDRESS DELETED]
2013年 4月 26日 (金) 01:26:43 JST


志水です。

久保さん、ありがとうございます。

なるほど、[ThreadStatic] 部分を当ててみると
なにやら、そげなことを言ってますね。
同時テストの仕方がわからないので
頑張って同時に叩いていたんです。
問題が発生しなくて逆に不安だったので、安心しました。
こんどはまたちょっと難しそうですが、
これをAOPとやらを使って実装したいと思います。
救いのご教授ありがとうございました。



(2013/04/25 23:30), kubo wrote:
> 久保(jflute)です
>
> 志水さん、こんばんは
> DBFluteご利用ありがとうございます!
>
>> メーリングリスト[seasar-dotnet:1169]を見つけました。
>> これを参考に実装したら切替えできました。
> とりあえず実装できたということでよかったです。
>
>> 「スレッドごとに一意に保持します 」
> SelectableDataSourceProxyWithDictionaryを見ると、
>
> [ThreadStatic]
> private static string _dataSourceName;
>
> となっていて、データソース名が
> スレッドローカル管理となっているため、
> どんだけリクエストが飛んできても、
> 他のリクエストが別のリクエストの接続先に
> 影響を与えることはないはずです。
>
>
> 2013/4/25 志水正幸 <ie2m-smz @ asahi-net.or.jp>:
>> 志水です。
>>
>> また自己レスですが、
>> メーリングリスト[seasar-dotnet:1169]を見つけました。
>> これを参考に実装したら切替えできました。
>> こんなに簡単にデータソース切替えができたんですね。
>>
>> このメーリングリストの中で、「スレッドごとに一意に保持します 」と
>> うたっているので、複数同時に同じWEBページを参照されても、
>> 当該ページ内で参照するユーザによって切替えられたデータソースは
>> このページ内での処理中は保持されるので、
>> 参照されるDB先は保証されると考えてよいのでしょうか?
>>
>> 以上、ご教授お願いいたします。
>>
>>
>>
>> *-----------------------------------------------------------------------*
>> [seasar-dotnet:1169] Re: [DBFlute] 複数データソースに関して
>>
>> データソース切替の仕組みについては以下のような形になっています。
>> Quill内部では設定されているデータソースの種類、数に関わらず
>> 共通して「SelectableDataSourceProxyWithDictionary」というデータソースを
>> 使っています。
>> 設定ファイルに記述されたデータソースはこの中に保持されます。
>>
>> SelectableDataSourceProxyWithDictionary#SetDataSourceName
>> を呼ぶと引数に渡されたデータソース名を保持します。
>> (スレッドごとに一意に保持します)
>>
>> DBに接続するときはまずSelectableDataSourceProxyWithDictionary#GetDataSource
>> が呼ばれ、保持しているデータソースのコレクションから
>> 直前のSetDataSourceNameで設定されたデータソース名をキーにして
>> データソースを取り出して返します。
>> (一度もSetDataSourceNameが呼ばれていない場合は設定ファイル内で
>> 最初に定義されているデータソース名を使用します)
>>
>> SetDataSourceNameでデータソース名を変更すると
>> GetDataSourceが呼ばれたときにデータソースを探すキーも変わり、
>> このことによってデータソースの切替を行っています。
>>
>> ※現時点(1.3.12)では2相コミットなどの仕組みは実装していないため
>> 複数のデータソースにまたがるトランザクションをかけることはできません。
>> 1トランザクション1データソースとしてご利用下さい。
>>
>> *-----------------------------------------------------------------------*
>>
>>
>>
>> (2013/04/25 19:41), 志水正幸 wrote:
>>
>> 志水です。
>>
>> アナログですが、
>> サンプルの会員登録を2つのブラウザで、同時実行したところ
>> 登録は各スキーマで実施していましたが、
>> 戻りの検索一覧画面の一覧が同一スキーマから
>> データを読み出ししていました。
>> このやり方では無理そうですね。
>> いけそうだと思ったんだけどなぁ。。
>> 何がいけないんだろう??
>>
>>
>> (2013/04/25 17:21), 志水正幸 wrote:
>>
>> 志水と申します。
>>
>> 【環境】
>> 開発OS:Windows7 64bit
>> DB-Server:Windows2008std
>>
>> C# FrameWork4.0
>> Oracle11g
>> Quill(s2container.net-1.4.0)
>> DBFlute0.8.9.50
>> ソース元は、dfnet-asp.net-example
>>
>> 初めてQuill、DBFluteを利用させていただいております。
>> ASP.NET(WEB)、C#も初心者ですが、一応、Java経験者です。
>>
>> 下記の要件でWEBアプリを作成したく
>> 初めてづくしですが、いろいろとネットで調べて実装してみました。
>> DBFluteやQuillの複数DB、スキーマについての説明も
>> 読ませていただきました。はっきり言って難しいです。
>> あんまりよく理解できていないなりに、実装を行い、
>> 何とか読込もできましたし、更新もできました。
>>
>> しかしWEBで下記の要件を実装した場合に
>> 多ユーザでの同時実行時に、トランザクション動作など、
>> はたして本当にこのような実装方法で問題ないのかが
>> はっきり言って理解不足で、投稿させていただいた次第です。
>> 何か注意点や、より良い実装方法等あれば、ご教授お願いいたします。
>>
>> <要件>
>> 同じデータベースで、・スキーマが違い、同一テーブル構造を持つ
>> データベース環境に対して、アプリケーション側のログイン画面で
>> ログインしたユーザの所属からユーザ専用のスキーマへ接続する。
>> ※スキーマ間のアクセスは行わない。
>>
>> <DBFLUTE>
>> 1.「dbflute_xxxxxx」で基本となるモジュールを一つだけ、generate.batで作成する
>> 2.A社用(dbflute_corpA)、B社用(dbflute_corpB)・・・・のスキーマを作成
>> 3.databaseInfoMap.dfpropの接続先をA社用、B社用・・・と変更しながら
>>   replace-schema.batを実行して、各スキーマに実テーブルを作成する。
>>
>> <aspx側>
>> ・宣言
>>   Protected _dataSourceDict As SelectableDataSourceProxyWithDictionary
>> ・ページロード
>>             String corpcd = [画面データの会社コード]
>>
>>             DataSourceImpl ds =
>> _dataSourceDict.DataSourceCollection["Dfxxxxxx"] as TxDataSource;
>>             ds.ConnectionString = "Data Source=XE ;User Id=user_" + corpcd +
>> ";Password=pass_" + corpcd ;
>> ・会社毎に専用スキーマに接続して、読込/更新などの処理を行う。
>>  DBFLUTEのモジュールは「dbflute_xxxxxx」を共通で使用する。
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> seasar-dotnet @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
>>
>>
>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> seasar-dotnet @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
>>
>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> seasar-dotnet @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
> _______________________________________________
> seasar-dotnet mailing list
> seasar-dotnet @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>



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