0
我將所有已建立的HTTPSession對象存儲在散列映射中。 有沒有在排隊消息之前確定HTTPSession是否仍然有效 ?典雅地檢查HTTPSession引用是否仍然有效
示例:如果我正在迭代散列 映射,我只想排隊處理有效的HTTPSession對象的消息。
UPDATE
如果有人有興趣,我需要這樣的邏輯與使用GWT-彗星。解決方案(如Tomasz Nurkiewicz指出的)可在底部this頁面找到。
我將所有已建立的HTTPSession對象存儲在散列映射中。 有沒有在排隊消息之前確定HTTPSession是否仍然有效 ?典雅地檢查HTTPSession引用是否仍然有效
示例:如果我正在迭代散列 映射,我只想排隊處理有效的HTTPSession對象的消息。
UPDATE
如果有人有興趣,我需要這樣的邏輯與使用GWT-彗星。解決方案(如Tomasz Nurkiewicz指出的)可在底部this頁面找到。
不幸的是,這沒有明確的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());
}
}
看起來不錯!我現在就給它一個鏡頭。 – wulfgarpro 2011-06-03 06:40:16
要小心,仍然存在競爭條件。您仍然需要使用會話處理錯誤。 – Yuliy 2011-06-06 02:41:34
@Yuliy:你能再詳細一點嗎?我必須承認我在這裏找不到比賽條件,我不知道你的意思是什麼錯誤。提前致謝。 – 2011-06-06 06:11:20