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 ServletContextListener
así 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();