我试图整合Hazelcast(持续版本 - 3.3)会话复制。
我们的基础设施包括:
我们的主要原因是:
将Hazelcast整合到我们的环境中:
每个tomcat服务器都将充当Hazelcast成员
基本上是Hazelcast WebFilter是第一个执行它的人 换行:WebFilter-> HazelcastSession-> setAttribute()实现 HttpSession界面
每次调用setAttribute时,Hazelcast会同步会话属性 与其他集群成员一起使用。
现在 - 它看起来像我们注入作为会话bean的每个Spring bean都没有被复制。
作为解决方法:
另外,当我查看其他stackoverflow时,我看到以下内容:Spring "session" scope of a bean?
Spring会话与HttpSession并不完全匹配,甚至 关于@SessionAttributes注释的Spring文档说 它可能存储在会话中,或者是某些会话 存储&#34 ;.我从[The Spring docs for 2.5] [1]基本上得到了这个 如果我这样做,那就试着理解它,然后继续我的生活 想要存储在HttpSession中的东西,我只需要Spring注入 HttpSession给我,假设您使用Spring MVC非常漂亮 简单,同一页面上的说明。
[1]: http://static.springsource.org/spring/docs/2.5.x/reference/mvc.html
它看起来很奇怪,Spring会话bean与HttpSession.setAttribute不完全匹配吗? 春天如何知道@Inject正确的bean?
更新:
/**
* Update all accessed session attributes through {@code session.setAttribute}
* calls, explicitly indicating to the container that they might have been modified.
*/
@Override
protected void updateAccessedSessionAttributes() {
// Store session reference for access after request completion.
this.session = this.request.getSession(false);
// Update all affected session attributes.
if (this.session != null) {
try {
for (Map.Entry<String, Object> entry : this.sessionAttributesToUpdate.entrySet()) {
String name = entry.getKey();
Object newValue = entry.getValue();
Object oldValue = this.session.getAttribute(name);
if (oldValue == newValue) {
this.session.setAttribute(name, newValue);
}
}
} catch (IllegalStateException ex) {
// Session invalidated - shouldn't usually happen.
}
}
this.sessionAttributesToUpdate.clear();
}
提前谢谢,
ELAD。