WrapDynaBeanがSerializableを実装していない
POJOのFormはWrapDynaBeanに包まれて、そしてWrapDynaBeanはBeanValidatorFormに包まれるんだけど、WrapDynaBeanがSerializableを実装していない・・・
Tomcat起動時にEclipseコンソールに
2005-07-19 23:25:25,906 [main] ERROR org.apache.catalina.session.ManagerBase - 持続されたセッションをロード中のIOExceptionです: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.commons.beanutils.WrapDynaBean java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.commons.beanutils.WrapDynaBean
って出力される。
無視するべきか(ダメだろー)
もうちょっと考えようかなー
追記:解決したー!!
単純にBeanValidatorFormから派生したクラスを作って、フィールドでWrapDynaBeanを持つんじゃなくて、毎回生成するようにしたらOKだった。
こんな感じで
public class SerializeBeanValidatorForm extends BeanValidatorForm { protected Object bean = null; public SerializeBeanValidatorForm(BeanValidatorForm form, ActionServlet servlet) { // WrapDynaBeanをフィールドで持つとSerializeできなくなる。 // それを回避するために // getDynaBean()のときに毎回WrapDynaBeanを生成するようにする。 // よって、dynaBeanは利用しないので、nullに初期化する。 super(form.getDynaBean()); this.dynaBean = null; this.bean = ((WrapDynaBean) form.getDynaBean()).getInstance(); this.setServlet(servlet); } // ------------------- Public Methods ---------------------------------- public DynaBean getDynaBean() { return new WrapDynaBean(bean); } // // dynaBeanを利用しているところをgetDynaBean()を利用するように修正。 // }