在所有Cluster Weblogic上使会话无效

时间:2011-01-21 04:18:28

标签: session java-ee weblogic invalidation

我尝试在每个群集的hashmap中保存用户会话。当我需要使它无效时,我将采用指定的会话ID。并使用通常的方式使会话无效,使会话无效。

public class SessionListener implements HttpSessionListener {

 public HashMap<String, HttpSession> sessionHolder = new HashMap<String, HttpSession>();

 @Override
 public void sessionCreated(HttpSessionEvent se) {
  sessionHolder.put(se.getSession().getId(), se.getSession());
 }

 public void invalidate(String sessionId){
  if(this.sessionHolder.get(sessionId)!= null){
   System.out.println("Invalidate session ID : " + sessionId);
   HttpSession session = sessionHolder.get(sessionId);
   session.invalidate();
  } else {
   System.out.println("Session is not created in this cluster ID : " + sessionId);
  }
 }

 @Override
 public void sessionDestroyed(HttpSessionEvent se) {
  System.out.println("Session " + se.getSession().getId() + " has been destoryed");
  sessionHolder.remove(se.getSession().getId());
 }
}

会话将在无效发生的地方消亡。但是在其他群集会话上仍然是可用的。

为什么其他群集上的会话仍然存在。以及如何使其他集群上的会话无效。

感谢。

1 个答案:

答案 0 :(得分:0)

(最好确认一下我们是在谈论服务器还是群集 - 你域名的config.xml会有所帮助)

会话对象仅由Web容器内的WebLogic Server管理 - 如果您在HashMap中手动创建会话对象的副本,无论是在另一个服务器还是另一个群集中,WebLogic Server都不会自动使该副本无效会话对象,因为它在Web容器之外。

WebLogic Server将自动且非常透明地创建HttpSession对象的复制副本,前提是您的&lt; session-descriptor&gt; weblogic.xml部署描述符中的元素具有正确的设置(建议使用replicated_if_clustered for persistent-store-type)

可在此处获取文档:http://download.oracle.com/docs/cd/E13222_01/wls/docs103/webapp/weblogic_xml.html#wp1071982

了解您在此处尝试实现的目标会很好 - 除非您正在讨论怪物应用程序或跨越广泛的网络段,否则不应该进行跨群集复制,尽管WebLogic Server支持它