2011-03-25 2 views
0

J'essaie de faire fonctionner la mise en cache sur une méthode de couche Service, mais elle y est toujours utilisée et appelle la base de données. Ma configuration est-elle incorrecte?Erreur ehCache et Spring MVC avec HIbernate

@Cacheable(cacheName="apiActivitiesCache", keyGenerator = @KeyGenerator (
      name = "ListCacheKeyGenerator", 
      properties = { 
        @Property(name="useReflection", value="true"), 
        @Property(name="checkforCycles", value="true"), 
        @Property(name="includeMethod", value="false") 
      } 
     ) 
    ) 
    public GetMemberActivitiesResponse getActivities(GetMemberActivitiesRequest request) { 

servlet-context.xml

<ehcache:annotation-driven cache-manager="ehCacheManager" create-missing-caches="true"/> 

    <ehcache:config cache-manager="ehCacheManager"> 
     <ehcache:evict-expired-elements interval="60" /> 
    </ehcache:config> 

    <beans:bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> 
     <beans:property name="configLocation" value="/WEB-INF/spring/ehcache.xml"/> 
    </beans:bean> 

ehcache.xml

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"> 
    <defaultCache eternal="true" maxElementsInMemory="100" overflowToDisk="false" /> 
    <cache name="apiActivitiesCache" eternal="false" 
     maxElementsInMemory="100" overflowToDisk="false" diskPersistent="false" 
     timeToIdleSeconds="0" timeToLiveSeconds="300" 
     memoryStoreEvictionPolicy="LRU" /> 
</ehcache> 

Répondre

0

J'ai essayé avec votre configuration exacte et cela a fonctionné. Votre classe de service a-t-elle la méthode getActivities configurée en tant que bean Spring?

De même, la méthode getActivities est-elle appelée par une autre classe ou est-elle appelée par une autre méthode de la même classe?

+0

La méthode getActivities se trouve dans ma couche de service, ActivitiesService.java. Il est appelé depuis ma couche de contrôleur, ActivitiesController.java. Il est appelé de la classe de contrôleur, serait-ce même important? –

+0

Rien sur ce sujet? –

1

Utilisez-vous Ehcache Spring Annotations (http://groups.google.com/group/ehcache-spring-annotations)? Cela ne fonctionne pas avec Hibernate.

0

getActivities est-il défini par une interface? Spring utilise des proxies Java basés sur des interfaces pour les wrappers d'annotations, de sorte que toutes les méthodes annotées doivent être définies par une interface.

+0

Oui, il est défini par une interface. Je dois décorer l'interface avec l'attribut ecache? –

+0

Non, les annotations peuvent être spécifiées sur la méthode d'interface ou sur la méthode d'implémentation et seront trouvées. L'autre question consiste à appeler getActivities d'un autre bean auquel le bean getActivities est injecté en tant que dépendance. Avec la façon dont les procurations de Spring fonctionnent, l'auto-invocation n'est pas interceptée. – Eric

Questions connexes