SessionStoreの謎1

まずは1.2.6時代にテンプレートとしてまとめた、WebApplicationのテンプレートを1.3に移植。
http://cwiki.apache.org/WICKET/migrate-13.html
を参考に順次設定方法が変わっていたのを解消していくと…
getPageSettings().setMaxPageVersions
(Page毎にセッションに保存するバージョン数…だと思う)
でつまる。
wikiを見るとPageSettingsでは無くなっていて、デフォルトは20…とか書いてあるが、肝心のデフォルト設定のやり方が分からない。
そもそも初期値20って多くないか??

http://www.slideshare.net/jcompagner/session-stores-page-maps-and-pages/
Wicketのコア開発者の人が書いたスライドを見つける。
…うーん。微妙。
後半を超要約してみる。

  • 1.3では二種類のSessionStoreがあって、一つは1.2と同じHttpSessionStore。一つはSecondLevelCacheSessionStore
  • SecondLevelCacheSessionStoreは三種類あって、DiskPageStore、SimpleSynchronousPageStore、DBPageStore
  • DiskPageStoreはクラスタリングできない。頑張って対応中。
  • DBPageStoreは「Make your own」自分で作れと??

DiskPageStoreはStickySession、FailOver不要なら可能。単にローカルディスクに保存してるので当たり前。
上記要約を読む限り共有ディスクに複数サーバが書き込みに行くのは無理っぽい。(今のバージョンでできるかどうかは未検証)
本番サーバはクラスタリング必須なんで致命的!!
(ちなみにSimpleSynchronousPageStoreはソース見たらコメントに「デモ用実装、本番で使うな」だって…)

結局現状1.2.6でAPサーバの機能でセッション共有しているので、HttpSessionStoreを使えば良いことに気づいた。
以下のコードでできると判明。(WebApplicationクラス)

	@Override
	protected ISessionStore newSessionStore() {
		return new HttpSessionStore(this) {
			@Override
			public IPageVersionManager newVersionManager(final Page page) {
				return new UndoPageVersionManager(page, 5);
			}
		};
	}

WebApplication#newSessionStore()のオーバーライドで使用セッションストアをHttpSessionStoreに差し替え。
AbstractHttpSessionStore#newVersionManager()のオーバーライドでUndoPageVersionを5に設定。

デフォルトでjavax.servlet.context.tempdirにセッション情報が吐かれること、上記修正で吐かれない事を確認したので反映してるようだ。


時間が遅くなったのでタイトルの「謎」の部分、上記設定時の挙動と謎シリーズ第二弾「ReloadingClassLoaderの謎」
は後日書きます。