计算在JBoss 3.2.1上部署的J2EE应用程序中的活动会话

时间:2009-07-02 05:49:30

标签: jboss count batch-file session

我管理一个部署在JBoss 3.2.1上的J2EE应用程序。作为我对客户服务的一部分,我想提供显示活动会话数的报告。我已经实现了一个简单的类和一个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

提前致谢,

2 个答案:

答案 0 :(得分:1)

有两种可能性让人想起: 您的JSP可以配置为不创建新会话。把它放在JSP的顶部:

<%@ page session="false"%>

或者,编写实现JBoss的ServiceMBean接口的JMX MBean,并将其部署为JBos服务。这个MBean将查询会话计数,并将出现在JBoss的JMX控制台上。您可以使用Web浏览器从那里监视它,而不会干扰您的会话数。

答案 1 :(得分:0)

JBoss JMX控制台在host = localhost,path = / YOUR_PROJECT,type = Manager

中已经有一个集成的会话计数器

顺便说一句,您应该使用AtomicInteger或同步来处理并发问题。