-ページ情報(1)

TapestryのページオブジェクトはHTMLページをレンダリングする際のモデルとしてもロジックとしても用いられます。ページオブジェクトは必要に応じて、ページのファクトリとして動作するページソースが持っているプールから取り出され、レンダリングが終わって後、レスポンスの最後にinithialize()を呼び出された上でプールに帰ります。そのため、ページオブジェクトのメンバーに情報を置いておいたまま後始末を怠っていると、別のユーザーのリクエストでページオブジェクトが再利用されたときにそのメンバーの値が参照されてしまいます。
また、このページプールはページが5分以上プールに存在した場合に、その30秒ごとにチェックしている中でページオブジェクトを破棄しています。そのため、たった一人でサービスを利用している場合でも、5分でページオブジェクトに残した情報は失われます。よってページオブジェクトのメンバーを利用する際には注意が必要です。誤解しやすいのは、ページオブジェクトがセッションに保持されていることはなく、そのように見えるのは一人で5分以内のアクセスを繰り返しているときに限る、偶然性の高い状態のときのみです。
まず鉄則として言えるのは、ページオブジェクトのメンバーは「基本的に」inithialize()で始末しなければなりません。始末しなくてよいのはリードオンリーかつ状況に従わず不変の値を保持するメンバーのみです。