Wicket 1.5ではSecondLevelCacheSessionStoreクラスが分解されている

はじめに

 SecondLevelCacheSessionStoreクラスといえば、「Wicketはページの履歴を保存しているのに、なぜメモリ使用量が現実的な範囲に収まるのか?」を調べていくと必ず遭遇するクラスだったわけですが、Wicket1.5では、このクラス名が見あたらず。
 私は内心相当慌てたのですが、単に内部構造が変わっただけで、同等の役割をするクラスは存在していました。

環境

どういった内部構造の変更が行われたのか

 どうやら、Wicket1.4までに存在したSecondLevelCacheSessionStoreは、IPageStore系とIDataStore系に分解されたようです。
 もうちょっと言うと、「メモリにストアしようが、ディスクにストアしようが、ストアすることには変わりないよね?」といった趣旨の元に再構成が行われたっぽいです(想像ですが)。

 以下にWicket1.5におけるクラス図を示します(クリックで拡大)。

データをストアする処理について、IPageStoreを実装するクラスが、IDataStoreを実装するクラスに委譲する構成です。

これを踏まえて

 解析の結果、「ディスクにページをシリアライズしたくない」と言う場合は、HttpSessionDataStoreを使えばよいことがわかりました。
 HttpSessionDataStoreを使いたければ、Application#init()内(正確には派生クラスにてオーバーライドしたメソッド)で、Application#setPageManagerProvider(final IPageManagerProvider)を使って、そういうIPageManagerProviderを設定してやればOKです。

 細かいことを言うと、Application#init()の前に、Application#internalInit()が呼び出され、そこで「setPageManagerProvider(new DefaultPageManagerProvider(this));」という文が実行されるので、内心気持ち悪いです。
(すなわち、結果的にDefaultPageManagerProviderのインスタンス生成が無駄になる)
 しかし、他にそれっぽい拡張ポイントは見あたらないので、前述した方法で良いはず。

さいごに

 AsynchronousDataStoreといういかにも「ページの返却が速くなりまっせ!」なオーラを出しているクラスがあるのですが、実験できておらず。
 誰か実験してくれないかなー。