Java 在不同的应用程序服务器上生成新的JSESSIONID

Java 在不同的应用程序服务器上生成新的JSESSIONID,java,apache,session,jboss,ejb,Java,Apache,Session,Jboss,Ejb,我有一个系统,在多个apache服务器后面有多个jboss(4.2.3)服务器 在其中一台jboss服务器宕机的情况下,我们仍然会让用户使用这些服务器的会话,但是由于JSSessionID中的应用程序服务器ID,他们会在服务器周围“反弹”,导致apache为每个请求向随机服务器发送请求,从而导致会话超时错误 我最初的想法是在应用程序中创建一个拦截器,如果我们检测到会话实际上是针对另一台服务器的(即session.invalidate()),则使会话无效 但这不会导致生成新的JSESSIONID(

我有一个系统,在多个apache服务器后面有多个jboss(4.2.3)服务器

在其中一台jboss服务器宕机的情况下,我们仍然会让用户使用这些服务器的会话,但是由于JSSessionID中的应用程序服务器ID,他们会在服务器周围“反弹”,导致apache为每个请求向随机服务器发送请求,从而导致会话超时错误

我最初的想法是在应用程序中创建一个拦截器,如果我们检测到会话实际上是针对另一台服务器的(即session.invalidate()),则使会话无效 但这不会导致生成新的JSESSIONID(即使使用此处描述的修复程序)

我的下一个想法是创建一个valve来完成相同的工作,但是根据请求而不是HttpServletRequest,但是我找不到将ValveBase添加到jboss 4.2.3的库(我甚至不确定valves是否受4.2.3的支持)

是否有:

a) 在让上述两个想法中的一个发挥作用的过程中,我遗漏了什么 或 b) 我有没有更好的办法来解决这个问题?(我想对会话进行群集,但由于基础设施问题,目前无法群集)


谢谢。

在Apache中使用会话粘性,这样它在死之前不会切换到其他应用服务器。

我已经打开了会话粘性,这就是问题所在,它会在服务器死后继续尝试粘到服务器上,直到其中一个应用服务器死前一切都正常。这是预期的行为