2014-10-30 2 views
1

мы получаем это исключение:JSF - SessionExpirationPhaseListener на кластере JBoss

TimeoutException: JBAS010213: Не удается получить блокировки по умолчанию-хост/...

Мы используем эту 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"); 
     } 
    } 
} 

}

Мы запускаем кластер JBoss с двумя узлами (mod_cluster + apache) и включаем SSO. Вы, ребята, знаете, что может быть неправильно? Или, по крайней мере, указать нам в правильном направлении?

Thanks, С уважением.

+0

Какую версию JBoss вы используете? Вы включили режим липкого сеанса? –

+0

Federico, мы используем JBoss EAP 6.3 и включен режим липкого сеанса. – Mateo

ответ

1

Я считаю, что проблема заключается в двух узлах, пытающихся получить доступ к тому же сеансу, где один узел обрабатывает входящий запрос, а второй узел выполняет истечение сеанса.

Проверка файлов cookie отправляется в вашем вызове ajax, возможной проблемой является выполнение фазового прослушивателя в узле, который не является владельцем сеанса.

EDIT:

Exist эту ошибку, возможно, связанные с этой проблемой: https://bugzilla.redhat.com/show_bug.cgi?id=993041

+0

Мы удалили SessionExpirationPhaseListener и все еще продолжаем. – Mateo

+1

@Mateo, пожалуйста, посмотрите ссылки, которые я добавил для ответа. –

+0

Первая ссылка, похоже, очень похожа на наш сценарий, но я не понимаю вторую. – Mateo