ポートレットのキャッシング・ポリシーの構成

ポートレットのフラグメント・キャッシングでは、ポートレットの Web アプリケーション・アーカイブ (WAR) ファイル内で、またはグローバルに、キャッシュ・ポリシーを cachespec.xml に定義する必要があります。キャッシング・ポリシーが定義されておらず、特定のポートレットに適用できない場合は、そのポートレットはキャッシュされません。

WebSphere® Application Server のキャッシング・ポリシーは柔軟性に富んでいるため、キャッシュ ID、および個々のポートレットの特定の要件にマッチする無効化ルールを定義することができます。定義可能なキャッシング・ポリシーは、Java ポートレット仕様で定義されているキャッシング動作に必ずしも準拠しているわけではありません。 以下のセクションでは、cachespec.xml ファイルのフィーチャーを利用して、この仕様に準拠するキャッシング・ポリシーを定義するための推奨方法について説明します。

キャッシュの有効期限。ポートレットは、portlet.xml デプロイメント記述子の <expiration-cache> エレメントでキャッシュの有効期限の時間を定義します。この要素が存在しない場合、または値がゼロの場合は、ポートレットはキャッシュされません。ポートレットのキャッシュの有効期限の時間は、デプロイメント記述子でのみ定義されます。cachespec.xml ファイルで指定されているキャッシュのタイムアウト値は無効です。

キャッシングの有効範囲。ポートレットは portlet.xml デプロイメント記述子の <caching-scope> エレメントで定義されます。ポートレットの内容をすべてのユーザーで共有する必要があるか場合も、ポートレットにユーザー固有の情報が含まれており、そのポートレットをユーザーごとに個別にキャッシュする必要がある場合も同様です。キャッシング・ポリシー定義でこの設定を保守するには、以下のキャッシュ・キー・コンポーネントとともに com.ibm.wsspi.portletcontainer.user_cache_scope 属性をキャッシュ・キーに組み込みます。
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
この属性の値は以下のとおりです。
  • パブリックなキャッシュ有効範囲を定義するポートレット内の値 public
  • プライベートなキャッシュ有効範囲を定義するポートレット内の現行のログオン・ユーザー ID。
  • ログオンしているユーザーがいない場合の、プライベートなキャッシュ有効範囲を定義するポートレット内の Null (匿名)。

プライベートなキャッシュ有効範囲を定義するポートレット内であっても、匿名アクセスを行うためにポートレットの内容をキャッシュする場合は、キャッシュ・キー・コンポーネントに <required>false</required> を追加します。これは、すべての匿名によるブラウザー・アクセスにより、同じキャッシュ内容が取り出されることを暗黙で意味します。

ポートレットのライフ・サイクル・メソッド。Java ポートレット仕様では、ポートレット内での実行のために、アクション、イベント、レンダリング、およびリソースという 4 つのライフ・サイクル・フェーズが定義されています。内容が生成されるのは、レンダリング・フェーズとリソース・フェーズのみです。アクション・フェーズとイベント・フェーズは、内容を生成せずにポートレットのアクティビティーを呼び出すため、キャッシュできません。ポートレット呼び出しのライフ・サイクル・フェーズは、javax.portlet.lifecycle_phase 要求属性で使用できます。以下のキャッシュ・キー・コンポーネントを組み込んで、正しいライフ・サイクルが存在しているか確認してください。
<component id="javax.portlet.lifecycle_phase" type="attribute">
		<value>RENDER_PHASE</value>
</component>
このキャッシュ・キー・コンポーネントは、ポートレットへのレンダリング要求をキャッシュするだけです。追加のリソース要求は、RESOURCE_PHASE を追加してキャッシュします。 多くの場合、リソース要求に対して個別の <cache-id> エレメントを定義するのが最もよいアプローチです。リソース要求内のキー生成をキャッシュするためのリソース ID は、com.ibm.wsspi.portletcontainer.resource_id 要求属性で使用できます。
要求パラメーター。一般に、ポートレットは複数のビューを表示します。 レンダリング・パラメーターは、表示されるビューを区別します。パラメーターの組み合わせごとに、対象となるポートレットのビューは異なります。すべてのビューは、個別にキャッシュする必要があります。したがって、完全な要求パラメーター・マップは、通常はキャッシュ・キーに組み込む必要があります。com.ibm.wsspi.portletcontainer.all_parameters 属性は、以下のキャッシュ・キー・コンポーネントとともに使用できる完全な要求パラメーター・マップの内容に固有値を指定します。
<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 メカニズムを使用します。

アクションによって無効化する必要のあるすべてのビューに、共通の依存関係 ID を定義します。共通 ID には、通常はポートレット・ウィンドウ ID とユーザーの有効範囲のみが含まれるため、ポートレット・アクションは、他のユーザーのプライベートなキャッシュ・エントリーには影響を与えません。
<dependency-id>action
			<component id="" type="portletWindowId"/>
			<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
	</dependency-id>
依存関係 ID を繰り返して現行のライフ・サイクル・メソッドを追加する無効化ルールを、条件として定義します。ignore-value 属性が条件部分にあることが重要です。ライフ・サイクル属性を、返される無効化 ID の一部にすることはできません。その理由は、無効化 ID は、上で指定された依存関係 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>
同じパターンに従って、個々のポートレットのキャッシング・ポリシーに、さらに複雑な無効化ルールを指定します (例えば、要求パラメーターによって決定される特定のアクション用のポートレット・ビューのサブセットだけを無効化できます)。以下のコード例は、Java ポートレット仕様で定義されている振る舞いに準拠する汎用のキャッシング構成を示しています。
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>

トピックのタイプを示すアイコン 参照トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rdyn_portletcachepolicy
ファイル名:rdyn_portletcachepolicy.html