同一Glassfish Server双Windows会话部署同端口应用新版本的影响
同一Glassfish端口存在活跃会话时部署应用新版本的结果
嘿,这个场景我在维护Glassfish应用时碰到过好几次,给你唠唠实际会发生的情况:
- 当前活跃会话不会被强制中断:Glassfish默认的部署逻辑很友好,不会直接踢掉正在操作的用户。已经建立连接的活跃会话会继续在旧版本应用上运行,直到用户主动结束会话或者会话超时。而新发起的请求会直接被路由到刚部署的新版本应用上。
- 新旧版本会短暂共存(热部署特性):Glassfish支持热部署,部署新版本时,服务器会同时加载新旧两个应用实例。只有当旧版本的所有活跃会话都结束后,才会彻底清理旧版本的资源(比如类加载器、内存占用)。这种设计就是为了避免用户操作到一半突然报错的尴尬。
- 可能出现全局资源冲突:如果你的应用依赖了全局共享资源(比如数据库连接池、自定义全局缓存、JMS队列),新旧版本同时运行时可能会出现资源竞争。比如旧版本还在占用连接池的连接,新版本又去申请,可能导致连接池耗尽;或者新旧版本对同一缓存数据读写不一致,引发业务异常。
- 会话完全隔离,数据不互通:新版本应用不会继承旧版本的会话数据,新用户的会话完全在新版本环境中运行,旧用户的会话依旧在旧版本里,两者的会话上下文是完全隔离的,不会互相干扰。
- 强制部署会直接中断活跃会话:如果你使用了
asadmin deploy --force命令强制部署,Glassfish会不管有没有活跃会话,直接卸载旧版本。这时候正在运行的会话会立刻中断,用户可能会看到500错误、连接重置或者页面加载失败的提示,生产环境尽量别这么干。
内容的提问来源于stack exchange,提问作者GhadaST
相关产品推荐
相关产品推荐

