[Seasar-user:2928] Re: コネクションプーリングの設定と動作(解決)

sato sato
2005年 11月 24日 (木) 17:48:54 JST


NSQ@佐藤です。

たにぐち さん、ひが さん、佐藤匡剛 さん。
問題が解決しました。

ありがとうございます。

たにぐちさんの指摘の通り、ServerControllerで要求がある毎にコンストラクタ
でコンテナを構築している箇所が問題でした。
コンストラクタでコンテナおよびDAOを取得している箇所を修正する事により、
期待通りの動作をするようになりました。


>たにぐちです。
>
>原因は ServerControllerの constructorにありますね。
>S2Containerを要求ごとに diconファイルから構築しているので、結局のとこ
>ろVM空間上に複数のコンポーネントセットが存在することになります。
>
>ということは、DataSourceもConnectionPoolも複数あるので、ログにあるよう
>な動きになります。
>
>S2の挙動というよりかは、DIの適用パターンにあわせて設計・動きを少し変更
>されたほうがよろしいかと思います。
>
>私なら以下の方法を使います
>
>  1. EditLogic が xxxDao を使う(必須)のであれば EditLogicのコンストラ
>     クタに引数を追加し、default constructorを削除する。
>     これは
>        public EditLogic(xxxDao dao) {
>           this.dao = dao;
>        }
>     のようにする
>  2. EditLogicは diconに定義する(か、自動登録されるような規則に従った
>     上でAutoRegisterを使う)
>     これでEditLogicのインスタンス管理はコンテナのもとにあります
>  3. EditLogicが必要な部分は S2を経由してインスタンスを取得するように
>     します。たとえば、EditLogicが StrutsのActionなのであれば S2Struts
>     を用います.
>     new EditLogic() している場所を getComponent(EditLogic.class) のよ
>     うにすればいいかと思いますが、この方法を用いるのであればインタフェー
>     スと実装クラスに分離したほうが良いです。
>    (S2JSFの場合は特に意識する必要すらないと思います)
>
>ではでは
>
># (別件)
># requiredTxを一箇所のみに定義して全体に反映したい、ということでしたら
># AutoAspect...とか InterceptorChain とかを使うといいと思いますよ

まだ使い方が良く分かっていませんが、教えていただいた方法について勉強した
いと思います。
ありがとうございます。
>
>--
>Hikaru Taniguchi <[E-MAIL ADDRESS DELETED]>
>_______________________________________________
>Seasar-user mailing list
>[E-MAIL ADDRESS DELETED]
>http://lists.sourceforge.jp/mailman/listinfo/seasar-user


 =======================================================




Seasar-user メーリングリストの案内