Exemple : Configuration du service de cache dynamique
L'exemple ci-dessous regroupe toutes les étapes de configuration du service de cache dynamique à l'aide du fichier cachespec.xml, afin de présenter l'utilisation des règles de génération d'ID cache, des ID de dépendance et des règles d'invalidation.
Supposons qu'un servlet gère un simple site d'actualités. Ce servlet utilise le paramètre de requête "action" pour déterminer si la demande est utilisée pour la "visualisation" des actualités (paramètre de visualisation "view") ou pour la "mise à jour" des actualités (paramètre de visualisation "update", utilisé par l'administrateur). Un autre paramètre de requête "catégorie" sélectionne la catégorie d'actualités. Supposons que ce site prend en charge un format personnalisé facultatif qui est stocké dans la session de l'utilisateur à l'aide du nom d'attribut "layout" (format). Voici des exemples de requêtes URL adressées à ce servlets :
http://votrehôte/votreappweb/newscontroller?action=view&category=sports (Renvoie une page d'actualités pour la catégorie Sports )
http://votrehôte/votreappweb/newscontroller?action=view&category=money (Renvoie une page d'actualités pour la catégorie Money)
http://votrehôte/votreappweb/newscontroller?action=update&category=fashion (Permet à l'administrateur de mettre à jour les actualités dans la catégorie Fashion)
Voici les étapes de configuration du service de cache dynamique pour cet exemple à l'aide du fichier cachespec.xml.
- Définissez les éléments d'entrée de cache (<cache-entry>) nécessaires à l'identification du servlet. Dans ce cas, l'URI du servlet est "newscontroller", ce qui va être l'élément nom (<name>) de l'entrée de cache. Etant donné que cet exemple met en cache un servlet ou un fichier JSP (JavaServer Pages), la classe d'entrée de cache est "servlet".
<cache-entry> <name> /newscontroller </name> <class>servlet </class> </cache-entry>
- Définissez des règles de génération d'ID cache. Ce servlet est mis en cache uniquement lorsque action=view (visualisation) ; par conséquent, un composant de l'ID cache correspond au paramètre "action" lorsque celui-ci a pour valeur "view" (visualisation"). La catégorie d'actualités est également une composante essentielle de l'ID cache. L'attribut de session facultatif du format de l'utilisateur est inclus dans l'ID cache. L'entrée de cache est désormais la suivante :
<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>
- Définissez des règles d'ID de dépendance. Dans le cas de ce servlet, un ID de dépendance est ajouté pour la catégorie. Ultérieurement, lorsque la catégorie est invalidée en raison d'un événement de mise à jour, toutes les vues de cette catégorie d'actualités sont invalidées.
Voici l'exemple d'entrée de cache après l'ajout de l'ID de dépendance :
<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>
- Définissez des règles d'invalidation. Dans la mesure où un ID de dépendance de catégorie est déjà défini, définissez une règle d'invalidation pour invalider la catégorie lorsque action=update (mise à jour). Pour incorporer la logique conditionnelle, ajoutez des composants "ignore-value" dans la règle d'invalidation. Ces composants ne s'ajoutent pas à la sortie de l'ID d'invalidation mais déterminent uniquement si l'ID d'invalidation est créé et exécuté. L'entrée de cache définitive se présente désormais de la façon suivante :
<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>