【发布时间】:2012-05-25 12:02:49
【问题描述】:
我设置了两个相同的 tomcat 服务器来托管相同的 Web 应用程序(Sun RI JSF 2 / Tomahawk)。对于负载平衡和故障转移场景,我使用 nginx 服务器作为反向代理,将请求委托给一台或另一台服务器。现在定义了一个 tomcat 作为备份解决方案,以便 tomcat server 1 处理所有请求。当我终止 tomcat 1 的进程时,nginx 很好地将以下请求委托给 tomcat 服务器 2。为了重用会话数据,我将两个 tomcat 服务器配置为使用 memcached 作为会话存储。 JSF 被配置为将其状态存储在服务器上。
关于日志文件,这个设置看起来相当不错,会话数据是使用 memcached 服务器读取和存储的。例如,这有助于使用 Web 应用程序,即使 Tomcat 1 已关闭,也无需再次登录。
尽管如此,我的(会话范围的)支持 bean 似乎在分别恢复会话后没有被存储或被使用。表单字段留空,应该用会话 bean 中的数据填充。
用上面提到的技术有可能做这些事情吗?
【问题讨论】:
-
为避免显而易见,会话中需要进行的所有内容都已实现
Serializable? -
我想是的。我唯一忘记提及的是我也使用 CDI/OWB。为了定位错误,我编写了一个小型计数器应用程序,计数器值绑定到会话范围的 bean。设置保持不变。我意识到当使用一个或另一个负责的服务器发送一些请求时,计数器并没有改变它应该的方式。用 Weld 替换 OWB 后,计数器并因此恢复状态似乎工作。如果您根本不使用 CDI,这同样适用。我现在将在主应用程序中将 OWB 替换为 Weld,并让您知道结果是什么。
-
您是否使用自己的解决方案将会话存储在 memcached 或 memcached-session-manager (memcached-session-manager.googlecode.com) 中?
-
嗨马丁,我正在使用你的 memcached-session-manager
标签: session jsf serialization memcached restore