Considérations liées à la mise en cache dynamique avec JSTL

HCL Commerce utilise la bibliothèque JSTL (Java Server Tag Library) pour créer des pages JSP. Si <% out.flush() ; %> n'encadre pas la balise <c:import>, l'utilisation de la mémoire cache dynamique entraîne des conséquences inattendues. L'instruction out.flush est requise pour toutes les instructions <c:import>, pas seulement pour celles qui concernent des fragments. Même si la page entière est mise en cache, les balises <c:import> doivent malgré tout être encadrées par des balises out.flush.

Lors de l'utilisation de la balise d'importation JSTL, le JSPWriter place les données en mémoire tampon. Il ne se purge pas des données en les envoyant au programme d'écriture du cache. En raison de cette mise en mémoire tampon, DynaCache ne sait pas quand l'application a cessé d'écrire les données dans le programme d'écriture parent. Par conséquent, le contenu enfant peut aussi être placé en mémoire cache avec l'entrée de cache parent et le fragment enfant peut alors apparaître deux fois.

Pour éviter ce problème, encadrez les balises <c:import> par la balise <% out.flush(); %>. La mémoire tampon sera ainsi vidée avant et après l'importation, ce qui garantit qu'aucune partie du contenu de l'enfant n'est écrit dans l'entrée de cache du parent.