Beispiel: Dynamischen Cacheservice konfigurieren
Dieses Beispiel führt alle Schritte auf, die zur Konfiguration des dynamischen Cacheservice mit der Datei cachespec.xml erforderlich sind und zeigt die Regeln zur Generierung von Cache-IDs, die Abhängigkeits-IDs und die Invalidierungsregeln.
Angenommen, ein Servlet verwaltet eine einfache News-Site. Dieses Servlet verwendet den Abfrageparameter "action", um festzustellen, ob die Anforderung verwendet wird, um News anzuzeigen (Abfrageparameter "view") oder zu aktualisieren (Abfrageparameter "update" - wird vom Administrator verwendet). Ein weiterer Abfrageparameter, "category", wählt die News-Kategorie aus. Nehmen Sie ferner an, dass diese Site ein optionales angepasstes Layout unterstützt, das mit dem Attributnamen "layout" in der Benutzersitzung gespeichert wird. Es folgen Beispiele für URL-Anforderungen, die an dieses Servlet gerichtet sind:
http://yourhost/yourwebapp/newscontroller?action=view&category=sports (Gibt eine News-Seite für die Kategorie "sports" zurück.)
http://yourhost/yourwebapp/newscontroller?action=view&category=money (Gibt eine News-Seite für die Kategorie "money" zurück.)
http://yourhost/yourwebapp/newscontroller?action=update&category=fashion (Ermöglicht dem Administrator, News in der Kategorie "fashion" zu aktualisieren.)
Im Folgenden wird beschrieben, wie Sie den dynamischen Cacheservice für dieses Beispiel mit der Datei cachespec.xml konfigurieren:
- Definieren Sie die <cache-entry>-Elemente, die erforderlich sind, um das Servlet zu identifizieren.
In diesem Fall hat das Servlet den URI "newscontroller". Somit ist dies das Element <name> des Elements cache-entry.
Da dieses Beispiel ein Servlet bzw. eine JSP-Datei zwischenspeichert,
lautet die Klasse des Cacheeintrags "servlet".
<cache-entry> <name> /newscontroller </name> <class>servlet </class> </cache-entry>
- Regeln zur Generierung von Cache-IDs definieren. Das Servlet wird nur zwischengespeichert, wenn action=view festgelegt ist.
Eine Komponente der Cache-ID ist also der Parameter "action", wenn der Wert
gleich "view" ist. Die Kategorie "News" ist ebenfalls ein wesentlicher Teil der Cache-ID. Das
optionale Sitzungsattribut für das Layout des Benutzers ist in der
Cache-ID enthalten. Der Cacheeintrag lautet jetzt wie folgt:
<cache-entry> <name> /newscontroller </name> <class>servlet </class> <cache-id> <component id="action" type="parameter"> <value>view</value> <required>true</required> </component> <component id="category" type="parameter"> <required>true</required> </component> <component id="layout" type="session"> <required>false</required> </component> </cache-id> </cache-entry>
- Regeln für Abhängigkeits-IDs definieren. Bei diesem Servlet wird eine Abhängigkeits-ID für die Kategorie hinzugefügt. Später,
wenn die Kategorie aufgrund eines Aktualisierungsereignisses invalidiert wird,
werden alle Sichten dieser News-Kategorie invalidiert. Das folgende Beispiel zeigt den Cacheeintrag nach dem Hinzufügen der
Abhängigkeits-ID (dependency-id):
<cache-entry> <name>newscontroller </name> <class>servlet </class> <cache-id> <component id="action" type="parameter"> <value>view</value> <required>true</required> </component> <component id="category" type="parameter"> <required>true</required> </component> <component id="layout" type="session"> <required>false</required> </component> </cache-id> <dependency-id>category <component id="category" type="parameter"> <required>true</required> </component> </dependency-id> </cache-entry>
- Regeln für die Invalidierung definieren. Da die Abhängigkeits-ID für eine Kategorie bereits definiert wurde,
wird jetzt eine Invalidierungsregel zur Invalidierung der Kategorie definiert, wenn
die Einstellung "action=update" festgelegt ist.
Zur Einbindung der bedingten Logik werden "ignore-value"-Komponenten zur
Invalidierungsregel hinzugefügt. Diese Komponenten werden nicht der Ausgabe der
Invalidierungs-ID hinzugefügt, sondern legen nur fest, ob die Invalidierungs-ID
erstellt und ausgeführt wird. Das Element "cache-entry" sieht schließlich wie folgt aus:
<cache-entry> <name>newscontroller </name> <class>servlet </class> <cache-id> <component id="action" type="parameter"> <value>view</value> <required>true</required> </component> <component id="category" type="parameter"> <required>true</required> </component> <component id="layout" type="session"> <required>false</required> </component> </cache-id> <dependency-id>category <component id="category" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation>category <component id="action" type="parameter" ignore-value="true"> <value>update</value> <required>true</required> </component> <component id="category" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry>