Hotdeploy対応いろいろ問題点

設定について、、、、
s2struts.diconは今回の新しいのに変更する必要があって
s2container.diconは以下のように記述してActionとServiceがHotdeployでもきちんとDIとAOPされるようにして

<components>
  <component class="org.seasar.framework.container.hotdeploy.OndemandBehavior">
    <property name="rootPackageName">"examples.hotdeploy"</property>
    <initMethod name="addCreator">
      <arg>
        <component class="org.seasar.framework.container.hotdeploy.creator.InterfaceCentricSinglePackageCreator">
          <property name="middlePackageName">"web"</property>
          <property name="nameSuffix">"Action"</property>
          <property name="instanceDef">@org.seasar.framework.container.deployer.InstanceDefFactory@REQUEST</property>
        </component>
      </arg>
    </initMethod>
    <initMethod name="addCreator">
      <arg>
        <component class="org.seasar.framework.container.hotdeploy.creator.InterfaceCentricSinglePackageCreator">
          <property name="middlePackageName">"web"</property>
          <property name="nameSuffix">"Service"</property>
          <property name="instanceDef">@org.seasar.framework.container.deployer.InstanceDefFactory@REQUEST</property>
        </component>
      </arg>
    </initMethod>
  </component>
</components>

struts-config.xmlに今回新たに作ったHotdeploy用のPlugInを記述して

    <plug-in className="org.seasar.struts.hotdeploy.HotdeployAutoStrutsConfigRegisterPlugIn">
	    <set-property property="rootPackageName"             value="examples.hotdeploy"/>
	    <set-property property="enableJar"                   value="false"/>
	    <set-property property="actionMiddlePackageName"     value="web"/>
	    <set-property property="actionSuffix"                value="Action"/>
	    <set-property property="actionFormMiddlePackageName" value="web"/>
	    <set-property property="actionFormSuffix"            value="Form"/>
	    <set-property property="docRoot"                     value=""/>
	    <set-property property="viewExtension"               value="jsp,html"/>
    </plug-in>

あとweb.xmlのActionServletのところを下のようにconfigFactoryパラメータを指定して、HotdeployModuleConfigを作るように変更する

  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.seasar.struts.servlet.S2ActionServlet</servlet-class>
   :
    <init-param>
      <param-name>configFactory</param-name>
      <param-value>org.seasar.struts.hotdeploy.HotdeployModuleConfigFactory</param-value>
    </init-param>
   :
  </servlet>

問題点は、

  • いろいろと設定しないといけないところ。
    • でも、一度きりだからよいかな。。。
  • s2container.diconでも定義しているrootPackageName、actionMiddlePackageName、actionSuffixをstruts-config.xmlでも定義しているところ。
    • でも、Formはs2containerで管理してないしなー。s2containerはForm名からクラスを引っ張ってくるだけの目的で利用するのも変な気もするし。かといって、s2container中心でFormの管理をしてしまうとstrutsのスコープ管理とゴチャマゼになってしまいそうで。

ちょっと別になるけど、ついでに、、、

  • ActionのpathとFormのnameはNamingRuleクラスによって各クラス名から生成されるのでアノテーションで指定できなくなっている。
    • FormのnameからFormクラスを特定したりActionのpathからActionインターフェースを特定しないといけないから、アノテーションで指定されると困るなーと思って。