2011-01-03 3 views
3

Je reçois l'exception suivante jeté dans ma demande Grails:"Impossible de supprimer l'entrée de stockage de disque pour [Class]" dans Grails - comment désactiver la mise en cache sur disque?

[1564928] store.DiskStore ClassNameCache: Could not remove disk store entry for ClassName#123195371. Error was null 
java.io.EOFException 
     at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2297) 
     at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2766) 
     at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:797) 
     at java.io.ObjectInputStream.<init>(ObjectInputStream.java:297) 
     at net.sf.ehcache.store.DiskStore$1.<init>(DiskStore.java:316) 
     at net.sf.ehcache.store.DiskStore.loadElementFromDiskElement(DiskStore.java:316) 
     at net.sf.ehcache.store.DiskStore.expireElements(DiskStore.java:973) 
     at net.sf.ehcache.store.DiskStore.throwableSafeExpireElementsIfRequired(DiskStore.java:657) 
     at net.sf.ehcache.store.DiskStore.spoolAndExpiryThreadMain(DiskStore.java:645) 
     at net.sf.ehcache.store.DiskStore.access$900(DiskStore.java:68) 
     at net.sf.ehcache.store.DiskStore$SpoolAndExpiryThread.run(DiskStore.java:1110) 

Les DataSource paramètres liés à la mise en veille prolongée sont les suivantes:

hibernate { 
    cache.use_second_level_cache=true 
    cache.use_query_cache=true 
    cache.provider_class='net.sf.ehcache.hibernate.EhCacheProvider' 
} 

Il semble que la configuration de la mise en cache en cours est écrit à /tmp/tomcat6-tmp/ .

Je voudrais désactiver complètement la mise en cache sur le disque et à la place mettre en mémoire cache seulement. Comment je fais ça?

Répondre

2

Si vous n'avez pas de fichier ehcache.xml dans votre chemin de classe, ehcache utilise ses paramètres par défaut. Mais si vous en avez un (mettez-le dans grails-app/conf ou src/java), il sera utilisé à la place. L'exemple à http://ehcache.org/ehcache.xml est bien documenté.

Quelque chose comme ceci devrait fonctionner; modifier les paramètres du cache par défaut pour les caches qui ne sont pas explicitement déclaré (bien que je préfère les créer tout pour l'amour de la documentation) et de définir des caches spécifiques qui ont des paramètres non définis par défaut:

<ehcache> 

    <diskStore path='java.io.tmpdir' /> 

    <defaultCache 
     maxElementsInMemory='10000' 
     eternal='false' 
     timeToIdleSeconds='120' 
     timeToLiveSeconds='120' 
     overflowToDisk='true' 
     maxElementsOnDisk='10000000' 
     diskPersistent='false' 
     diskExpiryThreadIntervalSeconds='120' 
     memoryStoreEvictionPolicy='LRU' 
    /> 

    <cache name='com.yourcompany.yourapp.DomainClassName' 
     maxElementsInMemory='1000' 
     overflowToDisk='false' 
    /> 

    <!-- hibernate stuff --> 
    <cache name='org.hibernate.cache.StandardQueryCache' 
     maxElementsInMemory='50' 
     eternal='false' 
     timeToLiveSeconds='120' 
     maxElementsOnDisk='0' 
    /> 

    <cache name='org.hibernate.cache.UpdateTimestampsCache' 
     maxElementsInMemory='5000' 
     eternal='true' 
     maxElementsOnDisk='0' 
    /> 

</ehcache> 

Il est aussi une bonne idée de placez les deux caches Hibernate à l'intérieur pour pouvoir les ajuster au besoin.

Questions connexes