[Seasar-user:17537] Re: [SAStruts] S2ContainerListenerを登録すると起動時に
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2009年 5月 27日 (水) 17:00:01 JST
小林 (koichik) です.
Date: Wed, 27 May 2009 15:41:10 +0900
From: 徳永 広樹 <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:17536] [SAStruts] S2ContainerListenerを登録すると起動時に
> SAStrutsにS2ContainerListenerを登録し、production(COOL deployモード)で
> 起動を行った場合以下のエラーが発生します。
> (ct、utの環境では発生しません)
・COOL deploy では S2 コンテナの初期化時に
コンポーネントの初期化を行います.
・SAStruts のコンポーネント (ActionCustomizer) は
Struts の初期化が終わった後に初期化される必要があります.
・S2ContainerListener を使うと S2 コンテナは
Servlet より先に初期化されます.
・Struts の初期化は ActionServlet で行われます.
つまり,S2ContainerListener を使うと Struts の
初期化が行われる前に SAStruts の初期化が始まって
しまい,例外が発生します.
> 実際にやりたいこととしては、
> 「ServletContextListenerにてComponentを取得したい」
> と考えております。
>
> ここで質問なのですが
> 1.ServletContextListenerにてComponentを取得するという考え方自体が
> あまりよくないのでしょうか?
本来はよくないということもないはずですが,例えば
S2Axis と Teeda を組み合わせる場合なども Axis の
Servlet で初期化された後でないと S2Axis の初期化が
できないなど同じ制限があるので,多くの場合は
Listener より Servlet で初期化する方が無難です.
なので,Listener で S2 を使うのも避けた方が無難です.
> 2.SAStrutsではS2ContainerListenerを使用するべきではないのでしょうか?
そうなります.
Struts が ActionServlet の初期化相当をやってくれる
Listener を提供しているなら別ですが.
> 3.使用すべきでない場合代替手段などありますでしょうか?
Listener でやろうとしている処理を Servlet あるいは
S2 で管理されるコンポーネントでやるのがよいかと.
--
<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 メーリングリストの案内