[Seasar-user:12880] Re: Web以外でのComponentのScope指定

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 2月 14日 (木) 22:00:35 JST


小林 (koichik) です.

Date:    Thu, 14 Feb 2008 20:45:17 +0900
From:    "TAKEUCHI Shinichi / 竹内 伸一" <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:12874] Re: Web以外でのComponentのScope指定

>   S2RMIで使用しているのは、GenericExternalContextだと思う
> のですが、これにはSessionスコープを扱う機能がないようです。

セッションはリクエスト (スレッド) ほど
一般化できないので用意していません.

> そこで、Sessionスコープを保持する機能を持たせたカスタムの
> ExternalContextを作成してS2に登録したいのですが、その方法
> が分かりません。
>   もしかすると、他のS2の既存コンポーネントの置換え登録方式
> と同じでapp.diconの初めの方で、カスタムExternalContextを
> 登録するだけでいいような気もするのですが、、、

いいえ.

org.seasar.framework.container.external.GenericS2ContainerInitializer

という初期化クラスが GenericExternalContext を
使うようハードコードしています.
この処理は S2Container のインスタンスを作成する
前に行われるので,dicon に記述するわけにはいきません.
# ExternalContext は S2Container 自身が
# 使用することに注意.

GenericExternalContext を使わない場合は独自の
初期化処理を行うクラスが必要です.
例えば Servlet 環境では

org.seasar.framework.container.servlet.SingletonS2ContainerInitializer

というクラスがほとんど同じようなことを
やっています.
ここでは HttpServletExternalContext という
ExternalContext の実装を設定しています.

これらと同じように独自の ExternalContext を
設定する独自の初期化クラスを用意すればいいと
思います.
# その場合,S2RMI-Server は使えなくなります.


-- 
<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 メーリングリストの案内