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.
<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.
<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.<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.
<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>