2010-01-21 9 views

Respuesta

5

Implementar HttpSessionListener, darle una propiedad static Set<HttpSession>, agregar la sesión durante sessionCreated() método, quitar la sesión de ella durante sessionDestroyed() método, registrar el detector como <listener> en web.xml. Ahora tienes una clase que tiene todas las sesiones abiertas en la instancia actual de JBoss recopilada. Aquí hay un ejemplo básico:

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; 
    } 
} 

Luego, en el servlet acaba de hacer:

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

Si bien desea almacenar/conseguirlo en el ámbito de aplicación de modo que usted puede hacer que el no estático Set<HttpSession>, a continuación, dejar que el HttpSessionCollector implementar ServletContextListenerasí y añadir básicamente los siguientes métodos:

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

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

que se puede utilizar en el servlet de la siguiente manera:

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

tal vez usando un grano de JMX es más elegante y no necesita ningún código. Simplemente lea el valor de

data: jboss.web: type = Manager, path =/myapplication, host = localhost "activeSessions

Cuestiones relacionadas