2014-04-23 2 views
3

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(); 
+0

Pls. fournir le code complet. Comment les données ont-elles été écrites? – cruftex

+0

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. –

+0

É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. –

Répondre

2

Lorsque vous utilisez la configuration XML suivante je peux trouver mes entrées dans la stocker:

<?xml version="1.0" encoding="UTF-8"?> 
<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="urn:infinispan:config:6.0 http://www.infinispan.org/schemas/infinispan-config-6.0.xsd" 
    > 

<!-- Using the cluster mode with grouping API--> 

<global> 
    <globalJmxStatistics enabled="false" /> 
</global> 

<default> 
    <!-- Enbaling eviction/expiration --> 
    <eviction strategy="LRU" maxEntries="2000" /> 
    <expiration lifespan="1000" maxIdle="500" /> 
    <jmxStatistics enabled="false" /> 

    <clustering> 
     <hash> 
      <groups enabled="true" /> 
     </hash> 
    </clustering>  
</default> 

<namedCache name="CacheStore"> 
    <persistence passivation="false"> 
     <singleFile fetchPersistentState="true" 
      ignoreModifications="false" 
      purgeOnStartup="false" location="${java.io.tmpdir}"> 
      <async 
       enabled="true" 
       flushLockTimeout="15000" 
       threadPoolSize="5" /> 
     </singleFile> 
    </persistence> 
</namedCache> 

</infinispan> 
Questions connexes