2017-02-21 36 views
0

В настоящее время я программирую JSF на Websphere 8.0 и сталкиваюсь с проблемой, и я думаю, что это из-за нашей кластеризации. У нас есть два узла, и после того, как я был в течение некоторого времени, моя проблема не возникала.Проблема с кластером Websphere 8 и JSF2

Моя проблема в том, что мой после отправки через commandButton заканчивается javax.faces.application.ViewExpiredException.

Также в StackTrace перед этим я нашел это:

View State cannot be reconstructed 
javax.faces.FacesException: javax.faces.application.ViewExpiredException 
    at org.apache.myfaces.shared_impl.util.StateUtils.decrypt(StateUtils.java:496) 
    at org.apache.myfaces.shared_impl.util.StateUtils.reconstruct(StateUtils.java:378) 

Так что я думаю, есть что-то не так с обработкой между двумя узлами.

В моей web.xml я поставил:

<distributable /> 

и

<env-entry> 
     <env-entry-name>jsf/ClientSideSecretKey</env-entry-name> 
     <env-entry-type>java.lang.String</env-entry-type> 
     <env-entry-value>SRe1FY2HKwBTOtT5KrtmiSoOzws+NA9/yX191wMFn9o=</env-entry-value> 
    </env-entry> 

как некоторые другие упомянутые в других потоках, но проблема все еще остается.

Возможно ли, что какая-то конфигурация будет выполнена внутри Websphere?

ответ

1

Это указывает на проблему с шифрованием. WebSphere 8.0 использует реализацию MyFaces JSF 2.0 - вполне вероятно, что вам нужно настроить общий секрет для каждого из ваших узлов с помощью параметров контекста MyFaces. Как минимум, вам нужно будет установить параметр org.apache.myfaces.SECRET:

<!-- Defines the secret (Base64 encoded) used to initialize the secret key 
    for encryption algorithm. The size of it depends on the algorithm used for encryption --> 
<context-param> 
    <param-name>org.apache.myfaces.SECRET</param-name> 
    <param-value>MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz</param-value> 
</context-param> 

Объяснение параметров безопасности MyFaces является here.

+0

Независимо от этого, я никогда не видел узел узла автоматического узла, если он опускается, пока пользовательский сеанс в настоящее время существует на одном. Брандмауэр/LB поставит их на узел №1, и все его запросы и т. Д. На основе файлов cookie будут перенаправлены туда? и если сервер остановлен/запущен, их сеанс мертв, поэтому просмотр истек? и в следующий раз, когда они войдут в LB, он отправит их на узел «вверх»/сервер? – VeenarM

+0

WebSphere ND - и другие серверы - поддерживают именно это, через сеансовый переход. В этом случае, если узел опускается, сеанс из отказавшего узла может быть поднят и продолжен другим узлом. (Это мотивация для кластеризации ...) – wtlucy

+0

Радости, возможно, правильно настроенной среды: P – VeenarM