2012-08-06 6 views
6

Sto utilizzando Spring3.1 in Env standalone. Sto memorizzando nella cache la mia voce usando l'annotazione @Cachable.Come eseguire l'iterazione su una voce di cache

A volte ho bisogno di scorrere la lista di memorizzazione in cache per ottenere valore specifico (non chiave).

Quindi sono riuscito a recuperare l'elenco memorizzato nella cache, ma come posso eseguire iterazioni sugli elementi.

private ClientDTO getClientDTOByClientId(Integer clientId) 
{ 

    Cache clientCache = null; 
    try 
    { 
     clientCache = ehCacheCacheManager.getCache("client"); 

      //need here to iterate on clientCache. how? 


    } 
    catch (Exception e) 
    { 
     log.error("Couldnt retrieve client from cache. clientId=" + clientId); 
    } 
    return clientDTO; 
} 

Utilizzo il meccanismo ehcache.

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" 
     p:cache-manager-ref="ehcache" /> 

    <bean id="ehcache" 
     class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" 
     p:config-location="classpath:ehcache.xml" /> 

grazie, raggio.

risposta

12

CacheManager.getCache() restituisce un net.sf.ehcache.Cache, che dispone di un metodo getKeys() che restituisce un elenco di chiavi della cache su cui è possibile eseguire l'iterazione. Per recuperare l'oggetto reale che è stato memorizzato (al contrario di net.sf.ehcache.Element), utilizzare Element.getObjectValue().

MODIFICA: In base alla primavera it doesn't look like they will ever support Cache.getKeys(), quindi sarà necessario eseguire il cast al fornitore sottostante.

Qualcosa di simile a questo: il metodo

public boolean contains(String cacheName, Object o) { 
    net.sf.ehcache.EhCache cache = (net.sf.ehcache.EhCache) org.springframework.cache.CacheManager.getCache(cacheName).getNativeCache(); 
    for (Object key: cache.getKeys()) { 
    Element element = cache.get(key); 
    if (element != null && element.getObjectValue().equals(o)) { 
     return true; 
    } 
    } 
    return false; 
} 
+2

Ma non ho cache.getKeys(). Sto usando org.springframework.cache.Cache – rayman

+0

Hai trovato qualche soluzione? Come eseguire iterazioni su infinispan Cache. Ho bisogno di chiavi. –

+1

Hai trasmesso al fornitore sottostante? –

Problemi correlati