Bonjour à tous,

J'ai une application web JAVA qui tourne sur un serveur glassfish. Je recontre une montée en charge du cache régulièrement qui provoque un fort ralentissement de l'application. Cette problématique me force à redémarrer le serveur (ou l'application) quotidiennement pour revenir à une utilisation normale.

J'utilise le framework JPA EclipseLink pour lequel j'ai défini une politique de gestion du cache par entité à l'aide de l'annotation @Cache et de l'option expiry. Cela permet de définir une durée de vie à l'objet dans le cache. Une fois la durée de vie de l'objet dans le cache atteinte, celui-ci ne se supprime pas et ne libère pas la mémoire. Il devient uniquement 'inactif' et oblige l'application à recharger sa valeur depuis la base de données lors de son prochain appel.

Voici la manière dont j'ai défini la politique de cache au sein de l'objet.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
@Entity
@Cache(
expiry=temps en ms
)
public class MaClass implements Serializable{
...
}
Dans mon fichier persistence.xml, j'ai ajouté :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
<shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode>
Avez-vous, s'il vous plaît, une idée de comment forcer la suppression de l'objet et la libération de la mémoire une fois la durée d'expiration atteinte ?

Je vous remercie d'avance pour vos conseils et solutions.