2011-06-03 68 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

相关问题