Struts2 – Maven – SVN – Comment éviter les problèmes de cache des ressources statiques lors des changements de version ?

De iMDEO dans Technique

14 Juin 2012

Introduction

Cette article traite de la problématique du cache des navigateurs web sur les ressources statiques (css, js,…) alors que de nouvelles versions de celles-ci sont disponibles sur le serveur d’application. La solution présentée rajoute le numéro de révision SVN dans l’url d’accès aux ressources statiques. Cette solution permet d’avoir une url unique par ressource et par version.

Rajout de la révision SVN dans le build

2 étapes sont nécessaires :

  • Rajouter le numéro de révision dans les variables Maven
  • Inclure cette variable dans le build

Ces deux étapes s’effectuent en modifiant le fichier pom.xml du project war.

Rajout du numéro de révision dans les variables Maven

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>buildnumber-maven-plugin</artifactId>

<executions>

<execution>

<phase>validate</phase>

<goals>

<goal>create</goal>

</goals>

</execution>

</executions>

<configuration>

<doCheck>false</doCheck>

<doUpdate>true</doUpdate>

</configuration>

</plugin>

Inclure cette variable dans le build

<plugin>

<artifactId>maven-war-plugin</artifactId>

<configuration>

<archive>

<manifestEntries>

<SCM-Revision>${buildNumber}</SCM-Revision>

</manifestEntries>

</archive>

</configuration>

</plugin>

Après cette opération le fichier /META-INF/MANIFEST.MF contient :

  • Manifest-Version: 1.0
  • Archiver-Version: Plexus Archiver
  • Created-By: Apache Maven
  • Built-By: XXXXX Build-Jdk: 1.6.0_30
  • SCM-Revision: 48249

Rajout du buildNumber dans la stack Struts 2

Cette opération ce fait par le biais d’un Interceptor.

Cette Interceptor charge le buildNumber à l’initialisation et le met dans la value stack à chaque appel. N’oubliez pas de déclarer cette Interceptor dans l’interceptor-stack pour que celui-ci soit appelé systématiquement.

Modification des liens des ressources statiques

Modifier vos liens vers les ressources statiques comme dans l’exemple suivant:

<script type= »text/javascript » src= »<%=request.getContextPath()%>/javascripts/pages/secure/dashboard.js?build=<s:property value= »buildNumber »/>« >

Conclusion

A chaque nouveau déploiement,  le buildNumber sera différent et vos ressources statiques automatiquement rechargées par le navigateur. On pourra perfectionner l’insertion des liens vers les ressources statiques par le biais d’une balise spécifique.

iMDEO recrute !

A la recherche de nouveaux talents (développeurs web et mobile, chefs de projet,...)

REJOIGNEZ-NOUS

A la recherche de nouveaux talents (développeurs web et mobile, chefs de projet,...)

Voir les annonces