2013-01-31 1 views
0

Dans notre application Web (dans JBoss utilisant Struts), nous utilisons des sessions principalement pour la sécurité ainsi que pour mettre en cache certaines données pour un utilisateur. Ainsi, chaque utilisateur connecté à l'application dispose d'une session et de différentes données mises en cache.Comment mettre à jour plusieurs sessions basées sur un événement

Sur la base des changements de paramètres, je veux changer le cache du sous-ensemble d'utilisateurs qui sont connectés (par exemple ont session)

Cela peut-il être atteint? Je n'ai pas été capable de trouver quoi que ce soit si loin de la recherche générale.

Répondre

1

Vous pouvez utiliser un HttpAttributeListener

un exemple de base here

HttpSessionAttributeListener:

L'interface HttpSessionAttributeListener permet à un objet de de surveiller les changements aux listes d'attributs de sessions dans un donné Web application. Le HttpSessionAttributeListener étend à son tour java.util.EventListener. Les méthodes qu'il contient sont

  • attributeAdded (HttpSessionBindingEvent se) - Ceci est la notification qu'un attribut a été ajouté à une session.
  • attributeRemoved (HttpSessionBindingEvent se) - Il s'agit de la notification qu'un attribut a été supprimé d'une session.
  • attributeReplaced (HttpSessionBindingEvent se) - Ceci est la notification qu'un attribut a été remplacé dans une session.
1

Vous pouvez le faire en stockant chaque objet de session dans un static List<Session> dans un objet de support. Vous pouvez le mettre par un HttpSessionListener#sessionCreated(..). N'oubliez pas de le retirer de la liste sur sessionDestroyed(..)

Ensuite, chaque fois que vous voulez faire quelque chose, il suffit de boucler la liste des sessions précédemment stockées et faire ce que vous voulez avec eux.

0

Vous avez essentiellement 2 options:

  1. Poussez les changements. Obtenez toutes les instances HttpSession dans une application large map que vous gérez avec l'aide d'un HttpSessionListener. De cette façon, vous pouvez simplement les obtenir à partir de la portée de l'application et les parcourir pour effectuer les changements nécessaires directement.

  2. Sondez les modifications. Stocker une instruction de modification dans la portée de l'application. Sur chaque requête HTTP, vérifiez avec l'aide d'un Filter ou ServletRequestListener si une modification est requise, puis effectuez les modifications nécessaires dans la session en cours et supprimez/désactivez l'instruction de modification.

Une alternative complètement différente est d'utiliser une application large cache partagée, comme la terre cuite ou Ehcache, de sorte que vous n'avez pas besoin de dupliquer les mêmes données sur toutes les sessions HTTP. Vous devez simplement traiter les données à la demande. Lorsque l'accès à la base de données arrive en image avec JPA, alors lisez la suite sur "2nd level cache", c'est exactement ce qu'il fait.

Questions connexes