1

我在一台 Tomcat 7 (7.0.28) 服务器上有一个 webapp。我想使用 Tomcat 的内置并行部署功能(FOO##001.war、FOO##002.war 等),但我不能让用户留在旧版本上,直到他们的会话超时或其他情况无效。我也不能只是使他们在旧 webapp 上的会话无效并让他们在新 webapp 上再次登录。我已经研究过集群 tomcat 服务器,但同样,我只有一个 Tomcat 实例。

有没有一种简单的方法使用我现有的设置而无需更改太多(或任何东西,最好是)将会话从旧版本自动迁移到新版本,而不会使会话无效或从 webapp 引导用户?

4

1 回答 1

0

经过大量研究和挫折后,事实证明,我想要实现的目标是 Tomcat 根本不可能实现的——至少不是我希望的方式。我最终想出的解决方案是使用 memcached 会话管理器,而不是默认的 Tomcat 序列化策略。这允许会话在 Tomcat 外部保持活动状态,并且还可以在同一 Tomcat 容器中运行的多个 Web 应用程序之间共享它们。

然而,这产生了另一个问题,因为现在同一个会话对同一个 webapp(不同版本)的两个实例有效。Tomcat不知道如何处理这种情况,因为旧版本和新版本的应用程序都在同一个地址,而不是选择一个实例,Tomcat什么也不做,显示一个空白页面。对此的解决方案有点老套——我修改了我们的 Ant 部署脚本,以同时部署新版本的 webapp 和取消部署旧版本的 webapp。

这导致应用程序的完全无缝部署,对最终用户没有影响。

于 2013-09-06T14:36:01.810 回答