[seasar-dotnet:957] Re: 動的に複数DBファイルを作成して、複数同時にアクセス

koyak [E-MAIL ADDRESS DELETED]
2008年 10月 16日 (木) 10:52:08 JST


小谷です。

データソース+トランザクションで関連するソースは
色々ありますが
データソースの中身を追うのであれば
Seasar.Extension.Tx.Impl.TxDataSource
Seasar.Extension.ADO.Impl.DataSourceImpl (TxDataSourceがこれを継承しているので)

トランザクション制御の中身を追うのであれば
Seasar.Extension.Tx.Impl.XxxTxHandlerのHandleTransactionメソッド
(一番読みやすいのは多分LocalRequiredTxHandler)

あたりから読んでいくのが個人的にはオススメです。

また、(何の保証もできないのですが(^^;)
一からデータソース相当のものを書かなくても
TxDataSourceを継承して一部を必要な分だけ書き換える、
(コンストラクタやGetConnectionなど)
という手もあるかもしれません。

2008/10/16 0:59 Y. Oshita <[E-MAIL ADDRESS DELETED]>:
> お世話になっています、大下です。
> 何度も恐縮です。
> ソースを読むといったものの、どのあたりを見ればいいか悩んでおります。
> トランザクションを使うので、Seasar.Extension.Tx.Impl.TxDataSourceあたりでしょうか?
>
> 2008/10/16 0:06 Yoshihiro OSHITA <[E-MAIL ADDRESS DELETED]>:
>>
>> 久保様、杉本様、
>> お世話になっています、大下です。
>> 回答ありがとうございました。
>> ソースを読んでみることにします。
>>
>> 2008/10/15 22:41 Kazuya Sugimoto <[E-MAIL ADDRESS DELETED]>:
>>>
>>> 杉本です。
>>>
>>> > 基本的にプロセス起動時に読んでそれ以降は見ないのでは。。。
>>> > (他のコミッタの方、どうです!?)
>>> アプリケーション構成ファイルを書き換えても、ConfigurationManagerで取得する
>>> 値は起動時から変わらないと思います。
>>>
>>> >>> Seasar.NET自体が内部でやっている「DataSourceの生成」と同じことを
>>> >>> アプリ上で自分自身で行う必要があるかと思います。
>>> > が、制御しやすく一番わかりやすいかと思います。
>>> 私もこういう方法になるんじゃないかと思います。
>>>
>>>
>>> 2008/10/15 22:21 kubo <[E-MAIL ADDRESS DELETED]>:
>>> > 久保です。
>>> >
>>> >> If false, the database will be created automatically.
>>> >> とあるように、自動的に「Library.SQ3」というDBファイルを作成してくれます。
>>> >
>>> > なるほど、この辺は組み込み系DB特有のものですね。
>>> > JavaでもH2やApacheDerbyが同じような機能もってます。
>>> >
>>> >> 直接App.configにxmlをがりがり書き込めばいいのかもしれませんが、まだ試してい
>>> >> ません。
>>> >> それに、このようにして書いた接続文字列をコンテナが読み取ってくれるのだろうか
>>> >> という疑問もあります。
>>> >
>>> > 個人的な見解では、ダメなような気がします。
>>> > .NETがどのようにApp.configを扱っているか次第ですが、
>>> > 基本的にプロセス起動時に読んでそれ以降は見ないのでは。。。
>>> > (他のコミッタの方、どうです!?)
>>> >
>>> >>> Seasar.NET自体が内部でやっている「DataSourceの生成」と同じことを
>>> >>> アプリ上で自分自身で行う必要があるかと思います。
>>> > が、制御しやすく一番わかりやすいかと思います。
>>> >
>>> > 2008/10/15 Yoshihiro OSHITA <[E-MAIL ADDRESS DELETED]>:
>>> >> 久保様、
>>> >> お世話になります、大下です。
>>> >>
>>> >>> アプリケーションのプログラムから「新しい接続先」をCREATEして、
>>> >>> その作ったばかりの接続先にDBアクセスするということでしょうか?
>>> >>
>>> >> そうですね。接続文字列は、
>>> >>
>>> >> "Data Source=Library.SQ3;FailIfMissing=False;…;Default Timeout=30"
>>> >>
>>> >> のようにしています。「FailIfMissing=False」 としておくと、
>>> >> (SQLite.NETのヘルプから抜粋しますが、)
>>> >> If set to true, will throw an exception if the database specified in
>>> >> the
>>> >> connection string does not exist.
>>> >> If false, the database will be created automatically.
>>> >> とあるように、自動的に「Library.SQ3」というDBファイルを作成してくれます。
>>> >>
>>> >> ただ、実際のプログラムではDBファイル名を動的に作成するので、
>>> >> あらかじめ設定ファイルに記述しておくことはできません。
>>> >>
>>> >> ならば、動的につくったDBファイル名を含む接続文字列をApp.configに書き込んでや
>>> >> ればどうだろう
>>> >> と思ったのですが、接続文字列はアプリケーション設定に属するらしく、プログラム
>>> >> 上から書き込めませんでした。
>>> >> 直接App.configにxmlをがりがり書き込めばいいのかもしれませんが、まだ試してい
>>> >> ません。
>>> >> それに、このようにして書いた接続文字列をコンテナが読み取ってくれるのだろうか
>>> >> という疑問もあります。
>>> >>
>>> >> でも、久保さんのお言葉から察すると、
>>> >>
>>> >>> Seasar.NET自体が内部でやっている「DataSourceの生成」と同じことを
>>> >>> アプリ上で自分自身で行う必要があるかと思います。
>>> >>
>>> >> をやる必要がありそうですね?
>>> >>
>>> >>> 久保(jflute)です。
>>> >>>
>>> >>>> SQLiteのDBアクセスにS2Container.NET,S2Dao.NETを利用しているのですが、
>>> >>>> 動的に作成した複数のDBファイルへの同時アクセスはどのようにすればよいで
>>> >> しょうか?
>>> >>>
>>> >>> SQLiteは使ったことないのですが、確認させて下さい。
>>> >>> アプリケーションのプログラムから「新しい接続先」をCREATEして、
>>> >>> その作ったばかりの接続先にDBアクセスするということでしょうか?
>>> >>>
>>> >>>> にあるように、きめ打ちで「Library.SQ3」を指定してやる分には、うまく動いて
>>> >> いるのですが、
>>> >>>> このDBファイルを動的に複数作成して、複数同時にデータを書き込んだりする必
>>> >> 要があります。
>>> >>>> この場合は、どのように設定すればよいでしょうか?
>>> >>>
>>> >>> 少なくとも設定ファイルに書くやり方では無理だと思います(静的なので)。
>>> >>> Seasar.NET自体が内部でやっている「DataSourceの生成」と同じことを
>>> >>> アプリ上で自分自身で行う必要があるかと思います。
>>> >>> また、DataSourceを動的に作れたとしても静的なDaoインターフェースから
>>> >>> その作ったばかりの接続先にアクセスするのは難しいかと思いますので、
>>> >>> その場合ADO.NETを直接利用する形になるかと思います。
>>> >>>
>>> >>> #
>>> >>> # コミッタの方で同じようなことやったことある人いらっしゃいます?
>>> >>> #
>>> >>
>
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
>


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