我们得到了这样的例外:
TimeoutException: JBAS010213:无法获取锁默认主机/.
我们在我们的web应用程序中使用这个PhaseListener来捕获ajax请求的会话超时并重定向到索引(我们怀疑这可能是相关的,但我们不知道):
public class SessionExpirationPhaseListener implements PhaseListener {
@Override
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
@Override
public void beforePhase(PhaseEvent event) {
}
@Override
public void afterPhase(PhaseEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest httpRequest = (HttpServletRequest) context.getExternalContext().getRequest();
if (httpRequest.getRequestedSessionId() != null && !httpRequest.isRequestedSessionIdValid()) {
String facesRequestHeader = httpRequest.getHeader("Faces-Request");
boolean isAjaxRequest = facesRequestHeader != null && facesRequestHeader.equals("partial/ajax");
// navigate to home page only for ajax requests
if (isAjaxRequest) {
ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context.getApplication().getNavigationHandler();
handler.performNavigation("home");
}
}
}}
我们正在运行一个具有两个节点(mod_cluster + apache)的JBoss集群,并启用了SSO。你们知道会出什么问题吗?或者至少给我们指明正确的方向?
谢谢,问候。
发布于 2014-10-31 14:49:48
我认为这里的问题是两个节点试图访问同一个会话,其中一个节点正在处理传入请求,而第二个节点正在执行会话过期。
在ajax调用中正在发送Check cookie,一个可能的问题是不属于会话所有者的节点中的阶段侦听器的执行。
编辑:
存在此缺陷可能与此问题有关:bug.cgi?id=993041
https://stackoverflow.com/questions/26653125
复制相似问题