我需要获得活动的wicket会话列表。现在我在覆盖方法newSession()中保存所有新会话,并且在会话失效时正在删除此会话。但是这种方法存在很多问题。我如何理解这种方法是非常粗鲁的黑客,如果你知道另一种方法,我将不胜感激。 (我使用wicket v1.5.4和tomcat v7.0.25)
更新
感谢您的回答,但我需要获取WICKET会话列表(WebSession)。我添加了HttpSessionListener和WebSessions和HttpSessions的静态映射(带同步)。这种方式比我好,并且没有旧问题,但它看起来也像是hack :(。你对获取wicket会话列表有什么想法吗?
答案 0 :(得分:6)
使用简单的Listener是否可以接受,比如这样?
public class SessionCounterListener implements HttpSessionListener {
private static int totalActiveSessions;
public static int getTotalActiveSession(){
return totalActiveSessions;
}
@Override
public void sessionCreated(HttpSessionEvent event) {
totalActiveSessions++;
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
totalActiveSessions--;
}
}
<web-app ...>
<listener>
<listener-class>SessionCounterListener</listener-class>
</listener>
</web-app>
“Wicket in action”一书中还有一个例子here
答案 1 :(得分:1)
另一种解决方案是使用JMX。如果您浏览到:
Catalina:type=Manager,context=/your_war_context,host=localhost
在操作下,您会找到listSessionIds()
方法。