J'ai une application Java fonctionnant sous JDK 1.6.0_17 sous Linux. J'utilise ehcache 2.1.0, avec un fichier ehcache.xml très simple:Pourquoi le magasin de disques ehcache est-il invalidé après le redémarrage de jvm?
<diskStore path="/ext/ehcache"/>
<defaultCache
overflowToDisk="true"
diskPersistent="true"
maxElementsInMemory="10000"
maxElementsOnDisk="1000000000"
eternal="true">
</defaultCache>
Dans mon application java, j'ai ce code:
private static final String CACHE_NAME = "APP";
public static void init() {
CacheManager.create();
final CacheManager manager = CacheManager.getInstance();
manager.addCache(CACHE_NAME);
}
private static Cache getCache() {
final CacheManager manager = CacheManager.getInstance();
return manager.getCache(CACHE_NAME);
}
public static Object get(String key) {
final Cache cache = getCache();
final Element element = cache.get(key);
return (element != null) ? element.getValue() : null;
}
private static void put(String key, Object value) {
final Cache cache = getCache();
final Element element = new Element(key, value);
cache.put(element);
}
Si je supprime le fichier de stockage de disque (/ ext/ehcache) et démarre mon application, je peux voir que le fichier de stockage de disque est en cours d'écriture. Si je fais "ls -l" sur le fichier pendant que l'application s'exécute, "ls -l" montre que la taille du fichier augmente au fur et à mesure que le temps passe. Puis j'arrête mon application java en utilisant "kill -15" (SIGTERM). Je redémarre ensuite mon application Java, et il semble que ça démarre bien. L'application Java continue à stocker des données dans ehcache, mais pendant une longue période, le fichier de stockage de disque ne se développe jamais. "ls -l" affiche toujours la même taille de fichier. Après avoir attendu plusieurs heures, le fichier recommence à croître.
Je suppose que tout ce qui se trouve dans le magasin de disques devient invalide et que le contenu du fichier se repeuple. Si c'est le cas, pourquoi tout ce qui est dans le magasin de disques est-il invalidé? Je veux conserver ces données disponibles entre les redémarrages de l'application.