たぷつきません

おなかがでてきた。もうたぷついてるやん。

解放されない リフレクションクラス 2

 どんぴしゃ!犯人確保できました。ognl.OgnlRuntimeが、リフレクションメソッドをクラスごとに永久にキャッシュしているのが問題でした。OGNLは「クラスはアンロードされるもの」という前提では設計されていないのです。
 ちょっと待てよ、ということは…TapestryはOGNLとの組み合わせが前提であるにも関わらずTapestryとOGNLは相性がよくない ということになります。ハワードさんは気づいているのかな。コミュニケーションとりたいけど英語できない。
 使用方法を限定することでパーマネント領域への圧迫はさけられるのですが、それはJVMを落とさずに、.htmlや.pageを修正して、リセットサービスをかけてはならない。ということになります。デザインと実装の分離をしたにも関わらず、コンテンツの入れ替えがサーバー止めないとできないというのは、少なくとも私の抱えている案件では致命的です。
 結局、OgnlRuntimeクラスにパッチをあてて対処することにしました。独自のHashTableもどきで作られているClassCacheという内部クラスを、WeakHashMapを使うように修正しました。キーとなっていたClassが消滅すれば自動的にEntryも消えるという算段です。ローカルでのストレスツールを掛けたテストでは効果があったようです。今日、本番機にアップすることになります。今後のためにここからダウンロードできるようにしておきます。*1

*1:あらら、どこかいっちゃった。URLも消えててもう分からないや