Mon application finit par faire beaucoup de traitement en arrière-plan via Actors, en chargeant spécifiquement des instances de Mapper et en travaillant ensuite dessus. C'est très répétitif et j'aimerais mettre en cache certaines de ces recherches dans mon code Actor.Comment utiliser en toute sécurité les caches ThreadLocal dans Actors?
J'utiliserais typiquement un ThreadLocal pour ceci. Cependant, étant donné que l'initialisation du thread est gérée par le pool de threads Actor, il semble que le seul endroit à initialiser et effacer ensuite le ThreadLocal serait dans la fonction partielle de l'acteur qui reçoit les messages entrants.
Ce que je fais maintenant est de créer une autre méthode dans mon acteur, comme ceci:
override def aroundUpdates[T](fn: => T) : T = {
clientCache.init {
fn
}
}
Lorsque la méthode gère init
la compensation ThreadLocal dans un bloc finally. Je n'aime pas cette approche car aroundUpdates n'existe que dans le but de mettre en place le cache et ça sent comme une odeur de code.
Y a-t-il une meilleure façon de procéder?
Merci pour la réponse. J'ai conclu que ma conception est trop compliquée (un groupe d'acteurs appelant des méthodes en dehors de leur champ de définition) et doit être nettoyée. – Collin