kuniku’s diary

はてなダイアリーから移行(旧 d.hatena.ne.jp/kuniku/)、表示がおかしな箇所はコメントをお願いします。記載されている内容は日付およびバージョンに注意してください。直近1年以上前は古い情報の可能性が高くなります。

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が行うということが重要かな。