2011-06-03 64 views
0

我將所有已建立的HTTPSession對象存儲在散列映射中。 有沒有在排隊消息之前確定HTTPSession是否仍然有效 ?典雅地檢查HTTPSession引用是否仍然有效

示例:如果我正在迭代散列 映射,我只想排隊處理有效的HTTPSession對象的消息。

UPDATE

如果有人有興趣,我需要這樣的邏輯與使用GWT-彗星。解決方案(如Tomasz Nurkiewicz指出的)可在底部this頁面找到。

回答

2

不幸的是,這沒有明確的API。但清理和優雅的方式很容易解決。

實施HttpSessionListener將每個新創建的會話存儲在併發映射中,並在會話銷燬時將其刪除。這樣,您的地圖將始終只包含有效的會話。更清潔,你不覺得嗎?

public class SessionStoringListener implements HttpSessionListener { 

    private Map<String, HttpSession> sessions = new ConcurrentHashMap<String, HttpSession>(); 

    @Override 
    public void sessionCreated(HttpSessionEvent httpSessionEvent) 
    { 
     HttpSession session = httpSessionEvent.getSession(); 
     sessions.put(session.getId(), session); 
    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) 
    { 
     sessions.remove(httpSessionEvent.getSession().getId()); 
    } 
} 
+0

看起來不錯!我現在就給它一個鏡頭。 – wulfgarpro 2011-06-03 06:40:16

+0

要小心,仍然存在競爭條件。您仍然需要使用會話處理錯誤。 – Yuliy 2011-06-06 02:41:34

+0

@Yuliy:你能再詳細一點嗎?我必須承認我在這裏找不到比賽條件,我不知道你的意思是什麼錯誤。提前致謝。 – 2011-06-06 06:11:20

相關問題