ページの保持間隔

Tapestryのページはアプリケーション内で共有されるオブジェクトです。
ページのインスタンスは、必要がなくなるといったんプールに戻され、一定時間そこに存在します。一定時間を経過するまでの間に、再度該当ページに対する要求があると、プールにあるインスタンスが再利用されます。この仕組みにより、インスタンスが生成される時間やリソースの消費を最小限に抑える事ができているのですが、そのトレードオフとして、ページの処理で適切に初期化や破棄をしていない場合、以前に保持していた情報が残ったままになるおそれがあります。

この現象を回避するためのノウハウは、まさたか日記さんが大変詳しいです。

さて、ページをプールする時間は、デフォルトでは5分に設定されています。
そのメカニズム

  • 30秒間隔でorg.apache.tapestry.util.pool.Pool#executeCleanupが呼ばれる。
  • executeCleanup内では、windowプロパティの値により、プールから破棄する対象になったかが判断される。
  • windowプロパティは世代管理の閾値になっており、デフォルトは10に設定されている。この場合は約5分でプールから破棄されることになる。
  • windowの値を小さくすれば、それだけ頻繁に破棄される事になる。逆に大きくすれば、なかなか破棄されない。
  • PoolのインスタンスはIEngineから取得できる。

通常、5分から変更する必要があるとは思いませんが、ページの再利用によってアプリケーションに問題が起こらないこと確認する為に、再利用間隔を長くしたり短くしたりしてテストしたい場合はこの方法でいじれます。