[Seasar-user:16744] Re: SAStrutsでのSESSION使用方法について

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 1月 23日 (金) 15:31:00 JST


小林 (koichik) です.

Date:    Fri, 23 Jan 2009 13:31:42 +0900
From:    aaa aaa <[E-MAIL ADDRESS DELETED]>
To:      <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:16743]  RE:  Re: SAStrutsでのSESSION使用方法について

> なぜ、自動登録になっていなかったかといいますと、Service共通で
> Interceptorを設定しているのが問題でした。
>  
> そこで、お聞きしたいのですがServiceにInterceptor設定をすると
> 自動登録対象ではなくなるのでしょうか?それともただ設定が違うだけでしょうか?

添付の dicon には AspectAutoRegister しか
ありませんが,おそらく ComponentAutoRegister 等も
使っていますよね?

AutoRegister も一種の自動登録ですが,
SMART deploy とは異なります.

AutoRegister の場合,インスタンス属性を明示的に
指定しなければ,デフォルトでは singleton に
なります.

singleton の場合,コンテナの初期化時に
インスタンスが生成されますが,その時点では
HttpServletRequest も HttpSession も存在しません.
そのため,sessionScope は空の HashMap となって
しまいます.

AutoRegister でインスタンス属性を指定するには

<component class="org.seasar.framework.container.autoregister.ComponentAutoRegister">
    <initMethod name="addReferenceClass">
        <arg>@[E-MAIL ADDRESS DELETED]</arg>
    </initMethod>
  <property name="instanceDef">
    @[E-MAIL ADDRESS DELETED]
  </property>
  ...
</component>

のようにします.

http://s2container.seasar.org/2.4/ja/DIContainer.html#ComponentAutoRegister


SMART deploy では customizer.dicon で
インターセプタを設定できます.

<component name="serviceCustomizer" 
    class="org.seasar.framework.container.customizer.CustomizerChain">
    <initMethod name="addCustomizer">
      <arg>
        <component name="removeSessionCustomizer" class="org.seasar.framework.container.customizer.AspectCustomizer">
          <property name="interceptorName">"updateChain"</property>
          <initMethod name="addClassPattern">
            <arg>"basepkg.service"</arg>
            <arg>".*Service"</arg>
          </initMethod>
          <initMethod name="addIgnoreClassPattern">
            <arg>"basepkg.service"</arg>
            <arg>"AbstractService"</arg>
          </initMethod>
        </component>
      </arg>
    </initMethod>
  </component>

この場合は ComponentAutoRegister 等で
Service を登録する必要がありません.
SAStruts を使っているなら,AutoRegister を
使うよりこちらがオススメです.

http://s2container.seasar.org/2.4/ja/DIContainer.html#Customizer

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