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

志水正幸 [E-MAIL ADDRESS DELETED]
2013年 4月 25日 (木) 22:56:35 JST


志水です。

また自己レスですが、
メーリングリスト[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

-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-dotnet/attachments/20130425/96dfa541/attachment.html>


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