2012-02-08 34 views
2

我需要获取活动的检票口会话列表。现在我将所有新会话保存在覆盖方法newSession()中,并且在会话失效时此会话被删除。但是这种方法存在很多问题。我如何理解这种方法是非常粗鲁的黑客行为,如果你知道另一种方法,我将不胜感激。 (我用的检票v1.5.4和Tomcat v7.0.25)检票口中的活动会话列表

更新

感谢您的回答,但我需要得到便门会话(WebSession)的列表。我用WebSessions和HttpSessions的静态地图(与同步)添加HttpSessionListener。这种方式比我好,没有老问题,但它看起来像黑客:(你有任何关于获取检票会议列表的想法?

+1

您是否需要列表进行监控?如果是的话,那么一些工具可以帮助:http://stackoverflow.com/questions/242958/best-tools-to-monitor-tomcat – 2012-02-08 10:17:07

+0

@BorisPavlović部分你是对的。它需要监听页面,但我使用自己的WebSession实现,不知道如何将tomcat的对象转换为wicket会话对象 – pushistic 2012-02-08 10:27:50

回答

6

这是可以接受的一个简单的监听器,而不是?此

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> 

也有来自“在行动检票”一书为例here

+2

+1,但不应该访问'totalActiveSessions'被同步或使用'AtomicInteger'吗?我不认为servlet规范说什么会话监听器的并发访问。 – 2012-02-08 12:22:30

+1

你可能是对的@TomaszNurkiewicz,在一个真实世界的应用程序,我可能会同步它:) – 2012-02-08 12:35:53

+0

我已经保存了HttpSession的列表,但我不知道如何将这些会话转换为wickets会话(WebSession),因为我可以找不到获得这个小门会话列表的方法 – pushistic 2012-02-08 15:18:14

1

另一种解决方案是使用JMX如果您浏览到:

Catalina:type=Manager,context=/your_war_context,host=localhost 

操作你会发现listSessionIds()方法。