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

koyak [E-MAIL ADDRESS DELETED]
2008年 10月 20日 (月) 01:41:42 JST


大下さん

小谷です。

>結果から申し上げると、私が書いた検証コードはまだうまく動作しておりません。

うむむ、残念です。
できればどのように動作が失敗したのかお教えいただけたらと思います。

○例外が発生しているのか?
-- 例外の種類、メッセージ、スタックトレース
○意図しない結果になっているのか?(例外が発生しているわけではない場合)
-- 期待していた結果と実際の結果
-- ログがある場合は前後のログの内容

などがあるとありがたいです。

提示していただいたコードを拝読しました。
修正してみていただきたい点が二つあります。

1.
TxSetupper#CreateTxDataSourceの
「// TransactionContext」から最後のreturn文の一行前までは
削除する必要があると思います。

CreateTxDataSourceが呼ばれる度に
・TransactionContextクラスのインスタンスが作られる(一つであるべき)
・共通データソースのSelectableDataSourceProxyWithDictionaryが
 新しく作られたTxDataSourceのインスタンスで上書きされる
という処理が流れるため
正常にDBアクセス、トランザクションが行えなくなります。

また、このメソッドで生成されているTransactionInterceptorのインスタンスは
どこにも参照されていないため、使われることがなさそうです。

2.
折角登録したデータソースの名前を指定(SetDataSourceNameを呼ぶ)
しているコードが(貼り付けていただいた範囲のコードには)見当たりません。
いくつデータソースを登録しても使われるデータソースは固定
になってしまうと思われます。


[S2Dao][Transaction]属性を設定するとQuill側で
トランザクションをかけたり、DBアクセスに必要なクラスのインスタンスを生成したり
といったことが行われるため利用側はその分のコードを書く必要はありません。

その他については問題ないと思います。

上記修正を行った上でもう一度試してみていただけないでしょうか。


>正直、S2Container.NET?Quill?とちょっと私も混乱しているのですが、

こちらも説明不足でした。申し訳ないです。

S2Container.NETの中には「S2Container」と「Quill」の2種類のDIコンテナがあります。
コンポーネント(DIコンテナで管理するクラスのインスタンス)の登録は
S2Containerの方はdiconという拡張子の設定ファイル、
Quillの方は専用の属性を使います。

S2Containerはdiconによる詳細で柔軟な設定ができ、
Quillは初期化処理をある程度分散できることによるパフォーマンス向上の他、
diconがいらない+機能、構造がシンプル、という特徴をもっています。

どちらが推奨か?と言えば(使われるプロジェクトの要件にもよりますが)
パフォーマンスやDBFluteのようなプロダクトの対応などの
理由から基本的には「Quill」の方になります。

2008/10/19 11:46 Yoshihiro OSHITA <[E-MAIL ADDRESS DELETED]>:
> 小谷様、
> お世話になっています、大下です。
> お忙しいところ、詳細な説明をつけていただき、
> 恐縮しております。ありがとうございます。
> (投稿しようとしたところ、メールが長すぎるとMLシステムに怒られたので、いままでのやりとりを削除しております。ご了承ください。)
>
>>とりあえず"動的な接続"の要件は基本的にこの二つ、ですよね?
>>1.テーブル構造は固定
>>2.接続先は最初は存在しない(動的に追加してやる必要がある)
>
> はい、その通りです。
> この要件をもっとはっきり提示するべきでした、すみません。
>
> 小谷さんから返信をいただく前に、検証コードを書いておりました。
> 結果から申し上げると、私が書いた検証コードはまだうまく動作しておりません。
>
> Diconの設定内容やSelectableDataSourceProxyWithDictionaryクラスのソースを読んでみて、こういう処理を書けばよいのかなぁと想像して書いたコードと、小谷さんからいただいた説明がだいたい同じであるので、大まかな流れはあっているとは思うのですが…。
> 全体的なソースコードを貼ってしまいたいのですが、ちょっと長くなりそうなので、部分的に質問させていただきますと、
>
>> この「IDataSource実装クラスのインスタンス(データソース)」が
>> 大下さん側で作っていただくことになる部分になります。
>> (TxDataSourceもIDataSourceを実装しているクラスです)
> これについて、以下のようなコードを書いてみました。

> ---------------
> こんな感じで合っていますでしょうか?
> このTxSetupperクラスのTxSetupper#CreateTxDataSourceメソッドを呼んだあとで、
>
>> 追加したデータソースを使いたい場合は
>> SelectableDataSourceProxyWithDictionary#SetDataSourceNameメソッドを呼び、
>> 引数にRegisterDataSourceで設定したデータソース名を指定して下さい。
> をやり、Daoで定義したメソッドを呼んでいます。(下記のとおり)
> ---------------
> --------------------
> となっております。
> #結局、ほとんどソース貼っちゃった…
>
>>すいません。
>>私、ずっとQuillを使うこと前提に話をしてしまっていますね。
>
> はは、
> 正直、S2Container.NET?Quill?とちょっと私も混乱しているのですが、Quillを使えってことなのかなぁと、なんとなく理解しています。
> おまけにAOPやDIも今回触れるのが始めてなので、かなり素っ頓狂な質問を繰り返しているような気がするのですが、ご容赦ください。
> お忙しいのにすみません、長くなりましたが上記で質問したことに何か回答をいただけると幸いです。
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
>


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