Я должен записать сервлет, который при вызове получает информацию о списке в настоящее время открываемых сессий.
Существует ли способ сделать это?
Реализуют HTTPSISELISTENER
, дайте ему Свойство [httpsession>
, добавьте сеанс к нему во время SESSESSCREATED ()
метод, удалите сеанс от него во время метода sessionDestroyed ()
, зарегистрировать слушателя как <слушателя>
в 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
нестатическим , затем пусть HTTPSILDCOLLECTOR
также реализует 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();
Возможно, использование бобов JMX более элегантно и не нуждается в коде. Просто прочитайте значение
данных: jboss.web: type = manager, path = / myApplication, host = localhost "Activesessionsessions