Реализуйте HttpSessionListener
, присвойте ему свойство static Set<HttpSession>
, добавьте к нему сеанс во время метода sessionCreated()
, удалите сеанс из него во время метода sessionDestroyed()
, зарегистрируйте слушателя как <listener>
в web.xml
. Теперь у вас есть класс, в котором собраны все открытые сессии в текущем экземпляре JBoss. Вот базовый пример:
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;
}
}
Тогда в вашем сервлете просто выполните:
Set<HttpSession> sessions = HttpSessionCollector.getSessions();
Если вы хотите сохранить / получить его в области приложения, чтобы можно было сделать Set<HttpSession>
нестатичным , тогда позвольте HttpSessionCollector
реализовать ServletContextListener
, а также и добавьте в основном следующие методы:
public void contextCreated(ServletContextEvent event) {
event.getServletContext().setAttribute("HttpSessionCollector.instance", this);
}
public static HttpSessionCollector getCurrentInstance(ServletContext context) {
return (HttpSessionCollector) context.getAttribute("HttpSessionCollector.instance");
}
, который вы можете использовать в сервлете следующим образом:
HttpSessionCollector collector = HttpSessionCollector.getCurrentInstance(getServletContext());
Set<HttpSession> sessions = collector.getSessions();