Caching-Richtlinien für Portlets konfigurieren

Für das Fragment-Caching für Portlets müssen Sie eine Cacherichtlinie in einer Datei "cachespec.xml" in der WAR-Datei des Portlets oder global definieren. Wenn keine Caching-Richtlinie definiert ist und für ein bestimmtes Portlet gilt, wird dieses Portlet nicht zwischengespeichert.

Die Caching-Richtlinien von WebSphere Application Server bieten eine hohe Flexibilität bei der Definition von Cache-IDs und Invalidierungsregeln, die den jeweiligen Anforderungen einzelner Portlets entsprechen. Die Caching-Richtlinien, die Sie definieren, sind nicht notwendigerweise mit dem Caching-Verhalten kompatibel, das in der Spezifikation für Java-Portlets definiert ist. Die folgenden Abschnitte enthalten Empfehlungen für die Nutzung der Features in der Datei "cachespec.xml", um eine Caching-Richtlinie zu definieren, die der Spezifikation entspricht.

Cacheverfall. Portlets definieren die Verfallszeit für den Cache mit dem Element <expiration-cache> des Implementierungsdeskriptors "portlet.xml". Wenn dieses Element nicht vorhanden ist oder den Wert null hat, wird das Portlet nicht zwischengespeichert. Die Cacheverfallszeit für Portlets wird ausschließlich über den Implementierungsdeskriptor definiert. Alle Cachezeitlimits, die in einer Datei "cachespec.xml" angegeben sind, haben keine Wirkung.

Geltungsbereich des Cachings. Portlets werden im Element <caching-scope> des Implementierungsdeskriptors "portlet.xml" definiert, unabhängig davon, ob der Portletinhalt von allen Benutzern gemeinsam genutzt werden soll oder ob er benutzerspezifische Informationen enthält und für jeden Benutzer individuell zwischengespeichert werden muss. Zur Verwaltung dieser Einstellung in der Caching-Richtliniendefinition müssen Sie dem Cacheschlüssel das Attribut com.ibm.wsspi.portletcontainer.user_cache_scope mit der folgenden Cacheschlüsselkomponente hinzufügen:
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
Dieses Attribut hat die folgenden Werte:
  • Den Wert public in einem Portlet, der den allgemein zugänglichen Geltungsbereich des Caches definiert.
  • Die aktuelle Anmeldebenutzer-ID in einem Portlet, die den privaten Geltungsbereich des Caches definiert.
  • Null (anonym) in einem Portlet; definiert den privaten Geltungsbereich des Caches, wenn kein Benutzer angemeldet ist.

Wenn Sie Portletinhalte für anonymen Zugriff zwischenspeichern möchten (auch in Portlets, die den privaten Geltungsbereich des Caches definieren), müssen Sie der Cacheschlüsselkomponente das Attribut <required>false</required> hinzufügen. Dieses Attribut impliziert, dass alle anonymen Browserzugriffe denselben Cacheinhalt abrufen.

Methoden für Lebenszyklus von Portlets. Die Java-Portletspezifikation definiert die vier Lebenszyklusphasen "action" (Aktion), "event" (Ereignis) "render" (Darstellung) und "resource" (Ressource) für die Ausführung eines Portlets. Inhalt wird nur in den Phasen "render" und "ressource" erzeugt. In den Phasen "action" und "event" werden Portletaktivitäten ohne die Generierung von Inhalt aufgerufen und müssen nicht zwischengespeichert werden. Die Lebenszyklusphase für einen Portletaufruf ist im Anforderungsattribut javax.portlet.lifecycle_phase verfügbar. Überprüfen Sie mit der folgenden Cacheschlüsselkomponente, ob der Lebenszyklus korrekt ist:
<component id="javax.portlet.lifecycle_phase" type="attribute">
		<value>RENDER_PHASE</value>
</component>
Diese Cacheschlüsselkomponente bewirkt, dass nur Darstellungsanforderungen an das Portlet zwischengespeichert werden. Über RESOURCE_PHASE können weitere Ressourcenanforderungen zwischengespeichert werden. In vielen Fällen empfiehlt es sich, ein separates Element <cache-id> für Ressourcenanforderungen zu definieren. Die Ressourcen-ID ist im Anforderungsattribut com.ibm.wsspi.portletcontainer.resource_id für das Caching von Schlüsselgenerationen in Ressourcenanforderungen verfügbar.
Anforderungsparameter. Portlets können gewöhnlich mehrere Sichten anzeigen. Über Darstellungsparameter kann unterschieden werden, welche Sicht angezeigt wird. Jede Parameterkombination adressiert eine andere Sicht des Portlets. Alle Sichten müssen separat zwischengespeichert werden. Deshalb sollte in den Cacheschlüssel normalerweise der vollständige Anforderungsparameter eingefügt werden. Das Attribut com.ibm.wsspi.portletcontainer.all_parameters liefert einen eindeutigen Wert für den Inhalt der vollständigen Anforderungsparameterzuordnung, die mit der folgenden Cacheschlüsselkomponente verwendet werden kann:
<component id="com.ibm.wsspi.portletcontainer.all_parameters" type="attribute">
				<required>false</required>
</component>
Wenn Sie eine Cacherichtlinie für ein bestimmtes Portlet schreiben und genau wissen, welche Sichten des Portlets über welche Anforderungsparameter adressiert werden, ist es gewöhnlich effizienter, bestimmte <parameter>-Elemente im Cacheschlüssel zu verwenden, sodass nur die wichtigsten Sichten des Portlets zwischengespeichert werden.

Weitere Cacheschlüsselkomponenten. Je nach Einsatzszenario müssen Sie weitere Informationen in Ihren Cacheschlüssel einschließen, falls der zurückgegebene Inhalt davon abhängig ist (z. B Portletmodus und Fensterstatus oder die Ländereinstellung der Anforderung in einem mehrsprachigen Portal). In einem Portal mit mehreren Einheiten, das unterschiedliche Markup-Typen unterstützt, muss der zurückgegebene Inhaltstyp ebenfalls als Teil des Cacheschlüssels angegeben werden. Der Inhaltstyp für ein Portlet ist im Anforderungsattribut com.ibm.wsspi.portletcontainer.response_contenttype verfügbar.

Cacheinvalidierung. Die Java-Portletspezifikation gibt vor, dass Aktions- und Ereignisanforderungen an ein Portlet den gesamten zwischengespeicherten Inhalt invalidieren müssen. Die Caching-Definitionen für Portlets lassen gewöhnlich das Caching mehrerer Sichten eines Portlets gleichzeitig zu. Wenn Sie alle invalidieren möchten, verwenden Sie den Mechanismus für Abhängigkeits-IDs der Datei cachespec.xml.

Definieren Sie eine gemeinsame Abhängigkeits-ID für alle Sichten, die von einer Aktion ungültig gemacht werden sollen. Die gemeinsame ID enthält gewöhnlich nur die ID des Portletfensters und den Benutzerbereich, sodass eine Portletaktion keine Auswirkungen auf die privaten Cacheeinträge anderer Benutzer hat:
<dependency-id>action
		<component id="" type="portletWindowId"/>
			<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
	</dependency-id>
Definieren Sie eine Invalidierungsregel, die die Abhängigkeits-ID wiederholt und der aktuellen Lebenszyklusmethode als Bedingung hinzufügt. Es ist von entscheidender Bedeutung, dass das Attribut ignore-value im Bedingungsabschnitt angegeben wird. Das Attribut "lifecycle" darf nicht in der zurückgegebenen Invalidierungs-ID enthalten sein, weil diese Invalidierungs-ID mit der zuvor angegebenen Abhängigkeits-ID exakt übereinstimmen muss.
<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>
Geben Sie nach demselben Muster komplexere Invalidierungsregeln in Caching-Richtlinien für einzelne Portlets an. Sie können beispielsweise nur einen Teil der Portletsichten für bestimmte Aktionen ungültig machen, die über Anforderungsparameter definiert werden. Der folgende Beispielcode beschreibt eine generische Caching-Konfiguration, die dem Verhalten entspricht, das in der Java-Portletspezifikation definiert ist:
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>

Symbol, das den Typ des Artikels anzeigt. Referenzartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rdyn_portletcachepolicy
Dateiname:rdyn_portletcachepolicy.html