J'essaie de maintenir les données mises en cache de Infinispan 6.0.2 dans un fichier, j'utilise le mode intégré et c'est la configuration du cache:données dans le cache Infinispan Persistance pour déposer
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.eviction().strategy(EvictionStrategy.LRU).maxEntries(1)
.persistence()
.passivation(false) // save evicted entries to cache store
.addSingleFileStore()
.preload(true)
.shared(false)
.fetchPersistentState(true)
.ignoreModifications(false)
.purgeOnStartup(false)
.location(System.getProperty("java.io.tmpdir")+"infinispan")
//.async().enabled(true).threadPoolSize(5)
.singleton()
.enabled(true)
.pushStateWhenCoordinator(true)
.pushStateTimeout(20000);
Configuration configuration = builder.build();
Il ne ne fonctionne pas pour moi (et je n'ai pas d'erreurs), le magasin de fichiers est créé dans le système de fichiers mais ne contient que "FCS1" et s'il est déjà créé, rien ne se passe (pas de mise à jour). Voici le code (rien de fantaisie) pour ajouter des paires clé/valeur du cache: (! Ce qui est presque le même que ci-dessus)
// Avoid JMX problems related to org.infinispan already registered domain
GlobalConfiguration globalConf = new GlobalConfigurationBuilder()
//.clusteredDefault()
.globalJmxStatistics()
.mBeanServerLookup(DummyMBeanServer.lookup)
.build();
EmbeddedCacheManager manager1 = new DefaultCacheManager(globalConf, configuration);
manager1.start();
Cache<String, String> cache1 = manager1.getCache(); // default cache
cache1.put("key11", "val11");
cache1.put("key12", "val12");
cache1.put("key13", "val13");
cache1.evict("key11"); // a desperate attempt to move this key to the store
cache1.stop();
// when I restart the cache all data is lost
cache1.start();
Pls. fournir le code complet. Comment les données ont-elles été écrites? – cruftex
En effet, nous devons voir le code que vous appelez et les assertions que vous avez en place, comme suggéré par cruftex. Btw, supprimez la partie singleton car ce n'est pas pertinent pour un cache local comme celui-ci. –
Étant donné que la passivation est désactivée, chaque put se traduira par une écriture dans le magasin persistant, qui est un magasin de fichiers, de sorte que l'appel d'expulsion n'est pas nécessaire. Comment vérifiez-vous que les données sont perdues lors du démarrage du cache? Avez-vous essayé d'obtenir des appels pour les clés que vous avez stockées? Je ne vois rien de mal, donc le plus simple est de prendre un débogueur et de suivre la pile d'intercepteurs vers CacheWriterInterceptor.visitPutKeyValueCommand() '. Vous pouvez également activer la journalisation TRACE sur le package org.infinispan et jeter un coup d'œil. –