Utiliser OsCache dans vos classes
Par Da Bourz le vendredi, 1 juin 2007, 12:29 - Java - Lien permanent
OsCache est une librairie Java très bien foutue et beaucoup utilisée pour mettre en place un système de cache, particulièrement sur les applications web. La documentation est plutôt bien faite, notamment pour l'utilisation d'OsCache directement dans vos JSP ou bien comme un filtre (Java Filter) pour cacher toute une partie du contenu de votre site internet en fonction du type de fichier (cacher toutes les pages .html par exemple).
Vous pouvez également utiliser OsCache directement dans vos classes pour cacher des objets, mais là, si un exemple de code est fourni, la mise en place n'est pas très bien expliquée, surtout au niveau de la gestion des threads et du système du Singleton. Voyons la mise en place de cela.
C'est la classe "GeneralCacheAdministrator" qui vous permet de récupérer et de gérer (charger et décharger des objets) le cache directement dans vos classes. Le problème, pour que cela soit efficace c'est qu'il faut bien que votre application n'ai qu'un seul cache et non pas un par instance (cela reviendrai à ce que chaque client utilise son propre cache à lui ! ;-))
Il faut donc créer une classe Singleton, qui ne charge qu'une seule fois (au démarrage ou au premier appel) "GeneralCacheAdministrator" puis qui ensuite retourne systématiquement la même instance de façon à utiliser le même cache. Voici un exemple d'implementation d'une telle classe :
package com.bourzeix.util; import com.opensymphony.oscache.general.GeneralCacheAdministrator;
public class TheCacheManager {
// Private constructor suppresses generation
// of a (public) default constructor
private TheCacheManager() {}
private static class TheCacheManagerHolder {
private static GeneralCacheAdministrator admin =
new GeneralCacheAdministrator();
}
public static GeneralCacheAdministrator getInstance() {
return TheCacheManagerHolder.admin;
}
}
Ensuite dans votre application, il ne vous reste plus qu'a initialiser le cache en utilisant ce Singleton :
//Recuperation du Cache GeneralCacheAdministrator admin = TheCacheManager.getInstance(); int myRefreshPeriod = 3600; // Une heure !
Puis à l'utiliser, pour y stocker directement des objets :
//sectors String My_Key = "My_Key"; Vector Objects_cached;
// Store in the cache admin.putInCache(My_Key, Objects_cached);
Puis les relire :
// Get from the cache Objects_cached = (Vector) admin.getFromCache(My_Key, myRefreshPeriod);
Et voilà !
Commentaires
Comment OSCache gère-t-il la distribution?
Pour info: gregluck.com/blog/archive...