2012-02-08 35 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()方法。