Вопрос по jboss, session – Подсчет активных сессий в приложении J2EE, развернутом на JBoss 3.2.1

0

Я управляю приложением J2EE, которое развернуто на JBoss 3.2.1. Как часть моего обслуживания моего клиента я хочу предоставить отчеты, которые показывают количество активных сессий. Я реализовал простой класс и страницу JSP, которые извлекают количество активных сессий, но я обнаружил недостаток: сам процесс проверки количества сессий создает новую сессию и, следовательно, раздувает количество сессий.

Вот код для моего класса:

package com.hudsongates;

import javax.servlet.http.*;

public class SessionCount implements HttpSessionListener
{
  private static int numberOfSessions = 0;

  public void sessionCreated (HttpSessionEvent evt)
  {
    numberOfSessions++;
  }

  public void sessionDestroyed (HttpSessionEvent evt)
  {
    numberOfSessions--;
  }

  // here is our own method to return the number of current sessions
  public static int getNumberOfSessions()
  {
    return numberOfSessions;
  }

}

Страница JSP выглядит так:

<html>
<head>
<title>Active Sessions</title>
</head>
<body>
activeSessions=<%=com.hudsongates.SessionCount.getNumberOfSessions()%>
</body>
</html>

Я хотел бы немного изменить подход, чтобы вместо использования страницы JSP я использовал простой пакетный файл. Например, я создал командный файл с именем getSessions.bat:

REM Setup environment
call environment.bat

set LOG_PATH=%INSTALL_PATH%\log
set =%INSTALL_PATH%\lib\app.jar
set CLASSPATH=%INSTALL_PATH%\lib\app.jar

%JDK_HOME%\bin\java -cp "%CLASSPATH%" com.hudsongates.SessionCount.getNumberOfSessions() > %LOG_PATH%\test.log

Проблема в том, что при выполнении командного файла я получаю следующее исключение:

Exception in thread "main" java.lang.NoClassDefFoundError: com/hudsongates/SessionCount/getNumberOfSessions()

Нужно ли добавлять «основной»? метод моего класса? Если так, что это сделало бы? Есть ли лучший способ достижения моей конечной цели - точный подсчет количества активных сессий? Имейте в виду, что счетчик сеансов должен быть записан в файл журнала в следующем формате:

activeSessions=24

Заранее спасибо,

Павел

Как вы вызываете слушателя? Моя сессия всегда остается на 0. Eddie
Хорошо, теперь как насчет некоторых представителей? :) skaffman

Ваш Ответ

2   ответа
0

Консоль JBoss JMX уже имеет встроенный счетчик сеансов в host = localhost, path = / YOUR_PROJECT, type = Manager

Кстати, вы должны использовать AtomicInteger или синхронизировать, чтобы позаботиться о проблемах параллелизма.

1

На ум приходят две возможности: Ваш JSP может быть настроен так, чтобы не создавать новый сеанс. Вставьте это в верхней части вашего JSP:

<%@ page session="false"%>

В качестве альтернативы напишите JMX MBean, который реализует интерфейс ServiceBBean JBoss, и разверните его как службу JBos. Этот MBean будет запрашивать количество сеансов и появится на консоли JMX JBoss. Вы можете использовать свой веб-браузер, чтобы отслеживать его оттуда, не влияя на количество ваших сеансов.

Error: User Rate Limit Exceeded

Похожие вопросы