Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JBoss集群上的JSF-SessionExpirationPhaseListener_Java_Jsf 2_Jboss7.x_Session Timeout_Phaselistener - Fatal编程技术网

Java JBoss集群上的JSF-SessionExpirationPhaseListener

Java JBoss集群上的JSF-SessionExpirationPhaseListener,java,jsf-2,jboss7.x,session-timeout,phaselistener,Java,Jsf 2,Jboss7.x,Session Timeout,Phaselistener,我们得到了这个例外: TimeoutException:JBAS010213:无法获取锁定默认主机/ 我们在web应用程序中使用此PhaseListener来捕获ajax请求上的会话超时并重定向到索引(我们怀疑这可能与此有关,但我们不知道): } 我们运行的JBoss集群有2个节点(mod_cluster+apache),并且启用了SSO。 你们知道会出什么问题吗?或者至少给我们指出正确的方向 谢谢, 关于。我认为这里的问题是两个节点试图访问同一会话,其中一个节点正在处理传入请求,而第二个节点正

我们得到了这个例外:

TimeoutException:JBAS010213:无法获取锁定默认主机/

我们在web应用程序中使用此PhaseListener来捕获ajax请求上的会话超时并重定向到索引(我们怀疑这可能与此有关,但我们不知道):

}

我们运行的JBoss集群有2个节点(mod_cluster+apache),并且启用了SSO。 你们知道会出什么问题吗?或者至少给我们指出正确的方向

谢谢,
关于。

我认为这里的问题是两个节点试图访问同一会话,其中一个节点正在处理传入请求,而第二个节点正在执行会话过期

检查ajax调用中是否发送了Cookie,一个可能的问题是在不是会话所有者的节点中执行阶段侦听器

编辑:


存在此错误可能与此问题有关:

您使用的jboss版本是什么?您是否启用了粘滞会话模式?Federico,我们正在使用JBoss EAP 6.3并启用粘滞会话模式。我们删除了SessionExpirationPhaseListener,但仍然存在。@Mateo请查看我添加到答案中的链接。第一个链接似乎与我们的场景非常相似,但是我不明白第二个问题。谢谢@Federico,读了这篇文章,我意识到在JBoss中将stickySessionsRemove设置为true可能是一个可行的解决方案。我们现在正在生产中进行测试。看看这个问题,也许在JBoss端使用max connections会有所帮助
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");
        }
    }
}