2010-01-21 3 views

Répondre

5

Mettre en oeuvre HttpSessionListener, donnez-lui une propriété static Set<HttpSession>, ajoutez la session pendant la méthode sessionCreated(), retirer la session de celle-ci au cours de la méthode sessionDestroyed(), enregistrer l'écouteur comme dans <listener>web.xml. Vous avez maintenant une classe dont toutes les sessions ouvertes dans l'instance JBoss actuelle ont été collectées. Voici un exemple de base:

public HttpSessionCollector implements HttpSessionListener { 
    private static final Set<HttpSession> sessions = ConcurrentHashMap.newKeySet(); 

    public void sessionCreated(HttpSessionEvent event) { 
     sessions.add(event.getSession()); 
    } 

    public void sessionDestroyed(HttpSessionEvent event) { 
     sessions.remove(event.getSession()); 
    } 

    public static Set<HttpSession> getSessions() { 
     return sessions; 
    } 
} 

Ensuite, dans votre servlet juste faire:

Set<HttpSession> sessions = HttpSessionCollector.getSessions(); 

Si vous voulez plutôt stocker/obtenir dans le champ d'application afin que vous puissiez faire le Set<HttpSession>non statique, puis laisser le HttpSessionCollector mettre en œuvre ServletContextListenerainsi et ajouter essentiellement les méthodes suivantes:

public void contextCreated(ServletContextEvent event) { 
    event.getServletContext().setAttribute("HttpSessionCollector.instance", this); 
} 

public static HttpSessionCollector getCurrentInstance(ServletContext context) { 
    return (HttpSessionCollector) context.getAttribute("HttpSessionCollector.instance"); 
} 

que vous pouvez utiliser dans Servlet comme suit:

HttpSessionCollector collector = HttpSessionCollector.getCurrentInstance(getServletContext()); 
Set<HttpSession> sessions = collector.getSessions(); 
3

utilisant peut-être un grain de JMX est plus élégant et ne nécessite aucun code. Il suffit de lire la valeur de

données: jboss.web: type = Gestionnaire, chemin d'accès =/myapplication, hôte = localhost "activeSessions

Questions connexes