ポートレットのキャッシング・ポリシーの構成
ポートレットのフラグメント・キャッシングでは、ポートレットの Web アプリケーション・アーカイブ (WAR) ファイル内で、またはグローバルに、キャッシュ・ポリシーを cachespec.xml に定義する必要があります。キャッシング・ポリシーが定義されておらず、特定のポートレットに適用できない場合は、そのポートレットはキャッシュされません。
WebSphere® Application Server のキャッシング・ポリシーは柔軟性に富んでいるため、キャッシュ ID、および個々のポートレットの特定の要件にマッチする無効化ルールを定義することができます。定義可能なキャッシング・ポリシーは、Java ポートレット仕様で定義されているキャッシング動作に必ずしも準拠しているわけではありません。 以下のセクションでは、cachespec.xml ファイルのフィーチャーを利用して、この仕様に準拠するキャッシング・ポリシーを定義するための推奨方法について説明します。
キャッシュの有効期限。ポートレットは、portlet.xml デプロイメント記述子の <expiration-cache> エレメントでキャッシュの有効期限の時間を定義します。この要素が存在しない場合、または値がゼロの場合は、ポートレットはキャッシュされません。ポートレットのキャッシュの有効期限の時間は、デプロイメント記述子でのみ定義されます。cachespec.xml ファイルで指定されているキャッシュのタイムアウト値は無効です。
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
この属性の値は以下のとおりです。- パブリックなキャッシュ有効範囲を定義するポートレット内の値 public。
- プライベートなキャッシュ有効範囲を定義するポートレット内の現行のログオン・ユーザー ID。
- ログオンしているユーザーがいない場合の、プライベートなキャッシュ有効範囲を定義するポートレット内の Null (匿名)。
プライベートなキャッシュ有効範囲を定義するポートレット内であっても、匿名アクセスを行うためにポートレットの内容をキャッシュする場合は、キャッシュ・キー・コンポーネントに <required>false</required> を追加します。これは、すべての匿名によるブラウザー・アクセスにより、同じキャッシュ内容が取り出されることを暗黙で意味します。
<component id="javax.portlet.lifecycle_phase" type="attribute">
<value>RENDER_PHASE</value>
</component>
このキャッシュ・キー・コンポーネントは、ポートレットへのレンダリング要求をキャッシュするだけです。追加のリソース要求は、RESOURCE_PHASE を追加してキャッシュします。
多くの場合、リソース要求に対して個別の <cache-id> エレメントを定義するのが最もよいアプローチです。リソース要求内のキー生成をキャッシュするためのリソース ID は、com.ibm.wsspi.portletcontainer.resource_id 要求属性で使用できます。<component id="com.ibm.wsspi.portletcontainer.all_parameters" type="attribute">
<required>false</required>
</component>
特定のポートレットのキャッシュ・ポリシーを作成し、どの要求パラメーターでどのポートレットのビューが操作されるのかが正確に分かっている場合は、通常はキャッシュ・キー内の特定の <parameter> エレメントを使用して、ポートレットの最も重要なビューのみをキャッシュすると、より効率的です。他のキャッシュ・キー・コンポーネント。使用シナリオによっては、返される内容 (例えば、ポートレット・モードとウィンドウ状態、あるいは複数言語ポータルにおける要求ロケール) が他の情報に依存する場合は、キャッシュ・キーにその情報を含める必要があります。 さまざまなマークアップ・タイプをサポートする複数デバイス・ポータルでは、返されるコンテンツ・タイプもキャッシュ・キーの一部である必要があります。ポートレットのコンテンツ・タイプは、com.ibm.wsspi.portletcontainer.response_contenttype 要求属性で使用できます。
キャッシュの無効化。Java ポートレット仕様では、ポートレットへのアクション要求とイベント要求は、現在キャッシュされているすべての内容を無効化する必要がある、と記述されています。 ポートレット・キャッシングの定義は、通常はポートレットの複数のビューを同時にキャッシュすることを許可しています。それらをすべて無効化するには、cachespec.xml の依存関係 ID メカニズムを使用します。
<dependency-id>action
<component id="" type="portletWindowId"/>
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
</dependency-id>
<invalidation>action
<component id="" type="portletWindowId"/>
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
<component id="javax.portlet.lifecycle_phase" type="attribute" ignore-value="true">
<value>ACTION_PHASE</value>
<value>EVENT_PHASE</value>
</component>
</invalidation>
Sample cachespec.xml file
<?xml version="1.0" ?>
<!DOCTYPE cache SYSTEM "cachespec.dtd">
<cache>
<cache-entry>
<class>portlet</class>
<name>MyPortlet</name>
<property name="consume-subfragments">true</property>
<cache-id>
<component id="" type="portletWindowId"/>
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
<component id="" type="portletWindowState">
<!-- minimized portlets are not cached -->
<not-value>minimized</not-value>
</component>
<component id="" type="portletMode"/>
<component id="" type="locale"/>
<component id="com.ibm.wsspi.portletcontainer.response_contenttype" type="attribute"/>
<component id="com.ibm.wsspi.portletcontainer.all_parameters" type="attribute">
<required>false</required>
</component>
<component id="javax.portlet.lifecycle_phase" type="attribute">
<value>RENDER_PHASE</value>
</component>
</cache-id>
<dependency-id>action
<component id="" type="portletWindowId"/>
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
</dependency-id>
<invalidation>action
<component id="" type="portletWindowId"/>
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
<component id="javax.portlet.lifecycle_phase" type="attribute" ignore-value="true">
<value>ACTION_PHASE</value>
<value>EVENT_PHASE </value>
</component>
</invalidation>
</cache-entry>
</cache>