HOTdeployとEnumとBeanUtils

ここのところ、Enumを使うと、PermGenを使いきる問題に悩まされていたのだけど、やっとこ一段落。状況としては、ActionかActionFormとかにEnumを拡張したクラスでプロパティを値をセットして持たせておいて、それをJSPで bean:write とかでそのプロパティを参照しようとすると、commons の BeanUtils の BeanUtilsBean でその情報をキャッシュしていってくれる。っで、このとき、Mapにキャッシュする際にクラスローダーがキーとしてセットされる。WeakHashMapだから、普通は、HotdeployClassLoader とかでも消えてくれるのだけど、Enumのプロパティだと、こいつ自身が消滅しないせいか(staticだから?)、そのクラスローダーも消滅せず、GCされないでクラス情報が残り、PermGenが消費されていくみたい。c:bean 以外にもこの現象が起きるのがあるのかもしれないけど、HOTdeployとEnumとBeanUtilsのあわせ技には注意しようっと。

SAStruts for Portlet

戻るボタンで戻ったページからページ遷移ができなかったのと、s:link とかでパスに日本語とか渡して受け取るときにURLデコードするようにしました。これで、気になっていたものは一通り直したから、N2 Portal/N2 Collabo 上でテストして問題がなかったら、sastruts-portlet をリリースしておこ(バージョンのrcは取って、1.0.0にします)。

Teedaのときは JSF がポートレットの仕様をサポートしてるから、それを考慮しつつ対応したのだけど、SAStruts の場合はサーブレットオンリーの世界だから、ポートレットの世界上にサーブレット環境を作り上げた感じで、結構、がんばっていると思う。そういう意味では、サーブレットのラップ技術を磨いたかも 🙂 Apache Portals にも Struts ブリッジがあるけど、あれって、ポータル固有のAPIを呼ぶような依存コードを(既に対応してなければ)別途つらなきゃならないけど、SAStrutsのポートレットの場合はそんなものは不要で、ポータルはJSR 168に対応していれば良い。

という感じで、なかなか良いできかと思うので、使ってみてくださいませ。