Salut,

Je développe une application web avec EHCache et Hibernate, et j'ai l'impression que les timeout que j'ai spécifié dans la configuration du cache ne sont pas respectés.

Voici un extrait de mon fichier ehcache.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
	<cache
		name="dto.User"
		eternal="false"
		maxElementsInMemory="100"
		timeToIdleSeconds="10"
		timeToLiveSeconds="10"
	/>
J'ai bien <cache usage="read-write"/> dans le mapping de User

Lors du premier chargement (une requête), j'ai bien une ligne "cache miss" dans les logs

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
2007-08-09 16:08:49,352 DEBUG - key: dto.User#1
2007-08-09 16:08:49,352 DEBUG - dto.UserCache: dto.UserMemoryStore miss for dto.User#1
2007-08-09 16:08:49,352 DEBUG - dto.User cache - Miss
2007-08-09 16:08:49,352 DEBUG - Element for dto.User#1 is null
2007-08-09 16:08:49,360 DEBUG - Cached: dto.User#1
Si j'ai bien compris, d'après ma configuration de ehcache, lors de la prochaine requête 10 secondes plus tard, je devrais ré-avoir un cache miss

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
2007-08-09 16:09:14,611 DEBUG - Caching: dto.User#1
2007-08-09 16:09:14,611 DEBUG - key: dto.User#1
2007-08-09 16:09:14,612 DEBUG - dto.UserCache: dto.UserMemoryStore hit for dto.User#1
2007-08-09 16:09:14,612 DEBUG - Cached: dto.User#1
Apparemment pas ...

Le résultat, c'est que lorsque User est modifié dans une session, les autres sessions web sont désynchronisées.
Je ne sais pas de combien est le timeout appliqué (ou si il y en a un), mais le seul moyen que j'ai trouvé pour retrouver la synchronisation est de redéployer l'application ...

Pas très pratique en production

Si quelqu'un a une idée ?