[Seasar-user:15298] Re: 【Teeda】sessionのDIについて

r.m [E-MAIL ADDRESS DELETED]
2008年 8月 7日 (木) 17:10:51 JST


小林様
ご返信有難うございます。

 ------------------ApplicationInitializer------------------
 SingletonS2ContainerFactory.init();
 S2Container container = SingletonS2ContainerFactory.getContainer();
 container.init();
 -----------------------------------------------------------

この部分を削除すると、ApplicationInitializer 初期化処理内の後続処理において
例えば MasterInfoDao(マスター情報取得用)を取得する場合
container.getComponent(MasterInfoDao.class)
では、コンテナーがまだ初期化されておらず、コンポーネントが取得する事が出来ません。
通常こういった利用はしないのでしょうか?

確かに、2度初期化されていてsessionへのBindがバッティングしているとも思いますが
どうにかしてサーバー起動時にマスター情報を取得してメモリーへ保持したいと考えております。




2008/08/07 17:00 Koichi Kobayashi <[E-MAIL ADDRESS DELETED]>:
> 小林 (koichik) です.
>
> Date:    Thu, 7 Aug 2008 16:38:50 +0900
> From:    r.m <[E-MAIL ADDRESS DELETED]>
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:15296] 【Teeda】sessionのDIについて
>
>> また、アプリケーション起動時に
>> マスター情報のInitializeをしており、その中でDaoにアクセスしています。
> (略)
>> ------------------ApplicationInitializer------------------
>> SingletonS2ContainerFactory.init();
>> S2Container container = SingletonS2ContainerFactory.getContainer();
>> container.init();
>> -----------------------------------------------------------
>> を行っています。
>
> そもそもこのメソッドが呼び出されるのは,
> (Teeda によって) container.init() が呼び出された
> 場合なので,ここで container.init() を呼び出す
> 意味はありません.
>
> もしかすると,Teeda による container.init() の
> 呼び出しと,この container.init() の呼び出しで,
> このコンポーネントの初期化が 2 回行われているかも
> しれません.
> そのせいで
>
>> sessionのDI時に
>> sessionに複数のコンポーネントが登録されています。
>> とエラーメッセージが表示されます。
>
> という現象になっているのかもしれません.
>
>> この部分を削除すると、sessionは正常に取得する事は出来ましたが
>> 以前も同じように実装していた物が、最新のバージョンでは動作しません。
>
> 関連性がよく分かりませんが,上記コードが
> 無意味なのは間違いないので削除してください.
>
> おかしな使い方をした場合の振る舞いまで互換性を
> 考慮しているわけではないので,動きが変わったと
> 言われれば,そういうこともあるかもしれません.
>
>> また、通常マスター情報の初期化(Daoを伴う場合)はどの様に行うのが望ましいでしょうか?
>> 現在の実装では、シングルトンパターンで実装しており
>> 初回のgetInstance()時に初期化していまして、一番最初のアクセスがあった際に初期化するのでも
>> いいのですが、なるべくならサーバー起動時い初期化したいと思っております。
>
> 現在のやり方でそうなっているはずです.
>
>> <components>
>>     <component class="jp.co.common.ApplicationInitializer">
>>         <initMethod name="initialized" />
>>     </component>
>> </components>
>
> このように定義されたコンポーネントは singleton に
> なり,コンテナの初期化時 (Web コンテナの起動時) に
> インスタンス化されます.
> <initMethod> で指定したメソッドもその際に呼び出されます.
> なので,このメソッドで初期化処理を記述すれば,サーバの
> 起動時に実行されます.
>
>
> --
> <component name="koichik">
>    <property name="fullName">"Koichi Kobayashi"</property>
>    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
>    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
> </component>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


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