我在一台Tomcat 7(7.0.28)服务器上有一个webapp。我想使用Tomcat的内置并行部署功能(FOO ## 001.war,FOO ## 002.war等),但我不能让用户保留旧版本,直到他们的会话超时或否则无效。我也不能在旧的webapp上使他们的会话无效,并让他们在新的webapp上再次登录。我已经研究过集群tomcat服务器但是我只有一个Tomcat实例。
是否有一种简单的方法可以使用我现有的设置,而无需更改太多(或任何事情,最好)将会话从旧版本自动迁移到新版本,而不会使会话无效或从webapp启动用户?
答案 0 :(得分:0)
经过多次研究和挫折之后,事实证明,答案是我想要实现的目标根本不可能与Tomcat实现 - 至少不是我希望的方式。我最终提出的解决方案是使用memcached会话管理器而不是默认的Tomcat序列化策略。这允许会话在Tomcat外部保持活动状态,并且还允许它们在同一个Tomcat容器中运行的多个Web应用程序之间共享。
但是,这会产生另一个问题,因为现在相同的会话对同一个webapp(不同版本)的两个实例有效。 Tomcat不知道如何处理这种情况,因为应用程序的旧版本和新版本都在同一地址,而不是选择实例,Tomcat什么也不做,并显示空白页面。对此的解决方案有些苛刻 - 我修改了我们的Ant部署脚本,以同时部署新版本的webapp并取消部署旧的版本化webapp。
这样可以完全无缝地部署应用程序,而不会影响最终用户。