HOT Deploy

HOT Deployを試してみる。

パッケージ構成

とりあえずパッケージ名は標準に従ったほうが良い模様。

  • test(OndemandBehaviorのrootPackageName)
    • web -> Action(クラス名の末尾はAction)
    • dto -> Dto(クラス名の末尾はDto)
    • service -> Serviceのインターフェース(クラス名の末尾はService)
      • impl -> Serviceの実装クラス(クラス名の末尾はImpl)
    • dao -> Daoのインターフェース(末尾はDao)

でもS2DaoMakerで作ったEntityをtestパッケージ以下に入れておくと、ClassCastExceptionが発生。
とりあえず別のパッケージにしておいた。

s2container.dicon

s2container.diconはこんな感じ。

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
  "http://www.seasar.org/dtd/components23.dtd">
<components>
  <include path="dao.dicon"/>
  <include path="aop.dicon"/>
  <component class="org.seasar.framework.container.hotdeploy.OndemandBehavior">
    <property name="rootPackageName">"test"</property>
    <initMethod name="addCreator">
      <arg>
        <component class="org.seasar.framework.container.hotdeploy.creator.ActionCreator" />
      </arg>
    </initMethod>
    <initMethod name="addCreator">
      <arg>
        <component class="org.seasar.framework.container.hotdeploy.creator.ServiceCreator">
            <property name="middlePackageName">"service"</property>
            <initMethod name="addCustomizer" >
              <arg>
                <component class="org.seasar.framework.container.autoregister.AspectCustomizer">
                  <property name="interceptor">serviceInterceptorChain</property>
                </component>
              </arg>
            </initMethod>
        </component>
      </arg>
    </initMethod>
    <initMethod name="addCreator">
      <arg>
        <component class="org.seasar.framework.container.hotdeploy.creator.DtoCreator">
            <property name="instanceDef">@org.seasar.framework.container.deployer.InstanceDefFactory@SESSION</property>
        </component>
      </arg>
    </initMethod>
    <initMethod name="addCreator">
      <arg>
        <component class="org.seasar.framework.container.hotdeploy.creator.DaoCreator">
            <initMethod name="addCustomizer" >
              <arg>
                <component class="org.seasar.framework.container.autoregister.AspectCustomizer">
                  <property name="interceptor">dao.interceptor</property>
                </component>
              </arg>
            </initMethod>
        </component>
      </arg>
    </initMethod>
  </component>
</components>

疑問点

  • OndemandBehaviorがComponentAutoRegisterに置き換わるみたいだけど、本番時などでHOT Deployを使用しない場合の切換え方法が不明
  • OndemandBehaviorで登録したコンポーネントのスコープが不明。今までみたいに階層化されたスコープに出来る?(うちの規模だと出来なくてもあまり困らないけど(^^;)
  • EntityもHOT Deployしたい(S2Daoの対応待ち?)