22.2. ページ断片のキャッシュ
Seam では
<s:cache> タグが JSF におけるページ断片のキャッシュに関する問題を解決してくれます。 <s:cache> は pojoCache を内部的に使用するため前述の手順を行っておく必要があります。 JAR を EAR に配置してから追加の設定オプションを編集します。 これで使用できるようになります。
<s:cache> はあまり更新のないレンタリングされたコンテンツを保存します。 たとえば、 ブログのウェルカムページでは最新のブログエントリが表示されます。
<s:cache key="recentEntries-#{blog.id}" region="welcomePageFragments">
<h:dataTable value="#{blog.recentEntries}" var="blogEntry">
<h:column>
<h3>#{blogEntry.title}</h3>
<div>
<s:formattedText value="#{blogEntry.body}"/>
</div>
</h:column>
</h:dataTable>
</s:cache>
key を指定することによって各ページ断片の複数のバージョンを保存することができます。 この例では、 1 ブログに対して 1 キャッシュバージョンが存在します。 region には、すべてのバージョンを保存するキャッシュまたは領域ノードを指定します。異なるノードは異なる有効期限ポリシーを持つ場合があります。
<s:cache> の問題は基礎的データがいつ更新されるか認識できないことです。 このため、 変更が発生した場合はキャッシュされた断片を手作業で削除する必要があります。
public void post() {
...
entityManager.persist(blogEntry);
cacheProvider.remove("welcomePageFragments",
"recentEntries-" + blog.getId());
}
変更を直ちにユーザーに見せる必要がないのであれば、 キャッシュノードで有効期限を短く設定しても良いでしょう。