本当のHOT deploy化

昨日の続きで、ここからが本当の作業だけど、、、
employeeの部分だけHOT deploy化します。


http://d.hatena.ne.jp/nobeans/20060630
をみながらs2container.diconに中身をつけていったんだけど、、、下の書き方はダメみたいだけど、とりあえず現状動くはずということで。たぶん、s2がbeta-4になったら書き方はかわるはずだし。

<components>
  <include path="aop.dicon"/>
  <include path="j2ee.dicon"/>
  <include path="dao.dicon"/>

  <component class="org.seasar.framework.container.hotdeploy.OndemandBehavior">
    <property name="rootPackageName">"org.seasar.struts.examples.employee"</property>
    <initMethod name="addCreator">
      <arg>
        <component class="org.seasar.framework.container.hotdeploy.creator.InterfaceCentricSinglePackageCreator">
          <property name="middlePackageName">"action"</property>
          <property name="nameSuffix">"Action"</property>
          <property name="instanceDef">@org.seasar.framework.container.deployer.InstanceDefFactory@REQUEST</property>
          <initMethod name="addCustomizer" ><arg>actionAspectCustomizer</arg></initMethod>
        </component>
      </arg>
    </initMethod>
    <initMethod name="addCreator">
      <arg>
        <component class="org.seasar.framework.container.hotdeploy.creator.DtoCreator"/>
      </arg>
    </initMethod>
    <initMethod name="addCreator">
      <arg>
        <component class="org.seasar.framework.container.hotdeploy.creator.LogicCreator">
          <initMethod name="addCustomizer" ><arg>logicAspectCustomizer</arg></initMethod>
        </component>
      </arg>
    </initMethod>
    <initMethod name="addCreator">
      <arg>
        <component class="org.seasar.framework.container.hotdeploy.creator.DaoCreator">
          <initMethod name="addCustomizer" ><arg>daoAspectCustomizer</arg></initMethod>
        </component>
      </arg>
    </initMethod>
  </component>

  <component name="actionInterceptorChain" class="org.seasar.framework.aop.interceptors.InterceptorChain">
    <initMethod name="add"><arg>aop.traceInterceptor</arg></initMethod>
  </component>

  <component name="actionAspectCustomizer" class="org.seasar.framework.container.autoregister.AspectCustomizer">
    <property name="interceptor">actionInterceptorChain</property>
  </component>

  <component name="logicInterceptorChain" class="org.seasar.framework.aop.interceptors.InterceptorChain">
    <initMethod name="add"><arg>aop.traceThrowsInterceptor</arg></initMethod>
    <initMethod name="add"><arg>aop.traceInterceptor</arg></initMethod>
    <initMethod name="add"><arg>j2ee.requiredTx</arg></initMethod>
  </component>

  <component name="logicAspectCustomizer" class="org.seasar.framework.container.autoregister.AspectCustomizer">
    <property name="interceptor">logicInterceptorChain</property>
  </component>

  <component name="daoInterceptorChain" class="org.seasar.framework.aop.interceptors.InterceptorChain">
    <initMethod name="add"><arg>aop.traceInterceptor</arg></initMethod>
    <initMethod name="add"><arg>dao.interceptor</arg></initMethod>
  </component>

  <component name="daoAspectCustomizer" class="org.seasar.framework.container.autoregister.AspectCustomizer">
    <property name="interceptor">daoInterceptorChain</property>
  </component>

</components>

にしてapp.diconにemployee.diconをincludeするのをやめる

<components>
  <include path="s2struts-hotdeploy.dicon"/>
  <include path="s2struts.dicon"/>
    :
    :
  <!--
  <include path="org/seasar/struts/examples/dicon/employee.dicon"/>
  -->
</components>

これでHOT deploy化終了。後は動作確認のみ!!


ってことだけど、、、動かない。。。。
問題点は

  • 〜InitActionが見つからないときがある
  • HttpSessionに格納している値をActionにセットできていない

の2点がわかった。

「〜InitActionが見つからないときがある」これが不思議。。。
直接HTMLを指定する場合は、きちんと見つかるのにActionを経由する(ActionからForwardする)場合は「コンポーネント(employeeEditInitAction)が見つかりません」ってエラーになってしまう。。。
もうちょっと調べてみよう。

「HttpSessionに格納している値をActionにセットできていない」これはS2StrutsでActionにセットしてるんだけど、これもうまくいかなくなった。。。これもきちんと調べないといけないけど、ClassLoaderが違ったりしてisInstance()とかでダメになったりするのかな。。。うーむ。。。


動作してるのと動作していないのを確認しよう。