s2struts移行のつづき(2)
前回の
2008-04-04 s2struts移行のつづき(1)
でエラーになる場合と正常になる場合についてログをのせたけども、いろいろ見ていくと(移行ガイドなど見直していると)・・・
s2strutsの移行ガイドの無設定S2StrutsのHOTdeploy対応の3.creator.diconの修正 を見ると
Employee機能では、DTOをActionFormとして利用しています。 DTO(ActionForm)の
インスタンス管理はS2ContainerではなくStrutsが行います。
そのため、DtoOndemandCreatorのinstanceDefをREQUEST(デフォルト)からPROTOTYPEに変更します
とあるから、検証したsampleのdev.diconでs2struts1.2系の頃の下記の記述のまま
<component name="layerDto" class="org.seasar.struts.examples.dev.dto.LayerDto" instance="request"/>
では、インスタンス属性が不正なため、argument type mismatch とエラーログが出ているのかなと推測。
<component name="layerDto" class="org.seasar.struts.examples.dev.dto.LayerDto" instance="prototype"/>
と記述すれば、問題なく動作する。
ご指摘いただいたので、2008-04-08追記
ActionFormとしてのDtoはdiconに記述しなくても、DIしてくれるので記述不要。
移行ドキュメントのcreator.diconの修正にActionFormとしてのDtoをどうすべきなのか記述されているので参考にする。
SMART deployを利用している場合は、
・DtoCreatorの定義を含めないようし、DTOをSMART deploy対象外とする
・SMART deployの対象外とするにはActionFormとしてのDTOをSMART deployの規約外のパッケージにおく
で対応できる模様。
ActionFormに該当するDtoのインスタンス管理はS2ContainerではなくStrutsが行うということが重要かな。