COOL deploy にしたら動かなくなった…
ローカルで HOT でサクサク開発してきて、いざ COOL にしてサーバにのっけたら、一部で動かないところがあった。ActionFormWrapper が reset メソッドを呼ぼうとして、 NullPointerException になっているっぽい。うーむ。
起動時のログを見ていくと、ActionForm 用に作成した Dto がコンポーネント登録されていない様子。うにゃあ、なんでだー?
調べてみると、ML にドンピシャのがあった。
FooDto extends HogeDto となっているとき、FooDto はコンポーネント登録されるけど、HogeDto はコンポーネント登録されない。HogeDto の型で、名前順に走査していったとき、先に FooDto が来るから、そのあとの HogeDto はコンポーネント登録をスキップする、と。まさに同じ動き。
ML でのアドバイスどおり FooDto と HogeDto の共通部分を abstract な BaseDto として切り出して、
FooDto extends BaseDto
HogeDto extends BaseDto
という形にしたら、無事コンポーネント登録されて動くようになりました。
いやー、見事にハマりました。HOT と COOL の動きを詳細に把握して製造していれば何てことないのだろうけど、初心者にはまだまだ厳しい。クラス設計から変えないといけないとなると、たまに COOL で動かしておかないと怖いなあ。