我正在读一本关于Java Servlets的书,在那里我遇到了HTTPSessionActivationListener
。指定在集群环境中,只能有一个包含特定会话标识的HTTPSession对象。假设群集中有2个节点A和B-集群环境和会话管理(Servlets)
第一个请求会发送到节点A.此处将创建一个HTTPSession S1以及会话属性,并将响应返回给客户端。 同一客户端发送后续请求。这个请求进入节点B.现在会话对象S1从节点A移动到节点B(在节点B中激活并在节点A中钝化)。
在这种情况下会话对象应该与属性一起是可序列化的吗?如果它不可序列化会发生什么?
为了统计活动会话的数量,是否应将两个节点中的会话相加以获取实际值?这通常如何完成?
另外我想ServletContext是唯一的每个JVM。在集群的所有节点中,属性是否被设置为servletcontext的一部分复制到servlet上下文中?
感谢凯文 - 提供了一个很好的见解。如果应用程序服务器发生故障,我猜如果发生粘滞会话功能,会话将会丢失。将会话数据存储在共享库中 - 是否可以使用配置来实现,或者应该由应用程序开发人员编码?我在链接中看到,您提供的应用程序开发人员必须进行相关更改。 – 2012-03-25 18:19:34
通常会通过cookie返回会话ID,并使用该会话ID查找商店中的数据。这就是所有的自定义应用逻辑,我认为(如果你使用spring,你会把代码放在拦截器中)。 – Kevin 2012-03-25 18:55:33
您对应用程序服务器关闭的说法也是正确的 - 并且是会话粘性的限制。 – Kevin 2012-03-25 18:56:35