ひがやすを技術ブログ

電通国際情報サービスのプログラマ

Super Agile Struts開発記その5 - BeanUtils

以前のエントリで、BeanUtilsとHOT deployをあわせて使うと、PropertyDescriptorが無駄にどんどんキャッシュされていってメモリリークする話を書きました。
http://d.hatena.ne.jp/higayasuo/20070725#1185340917
実は、問題はそれだけではなく、BeanUtilsは、publicフィールドをプロパティとして認識しないという問題もあります。メモリリークだけなら、どこかでクリアすれば良いだけなのですが、publicフィールドの場合は、どうしようもありません。
結局、BeanUtilsにJavaBeansのプロパティをアクセスされたら負けなのです。
最初に考えたのが、JavaBeansをDynaBeanでラップする方法。Struts単独なら、これでうまく行きますが、JSTLと組み合わせるとうまく行かない。なぜなら、JSTLはDynaBeanのことは(たぶん)知らないから。
で、今はどうしようとしているかというと、JavaBeansをMapでラップしようとしています。でも、単純にラップするだけだとうまく行かないのです。JavaBeansがネストしているときは、ネストしたJavaBeansもラップしないといけないから。後、Collectionや配列でその要素がJavaBeansの場合も、ラップしてあげないといけない。
これから、この辺のコードを書く予定です。