[Seasar-user:15297] Re: 【Teeda】sessionのDIについて
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2008年 8月 7日 (木) 17:00:11 JST
小林 (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 メーリングリストの案内