我管理一个部署在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
提前致谢,
保
答案 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或同步来处理并发问题。