Веб-приложение Liberty ViewExpiredException - не удалось найти сохраненное состояние просмотра для идентификатора представления - PullRequest
0 голосов
/ 03 января 2019

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

Что касается моего кода, я могу опубликовать любой, если это необходимо.Как я уже сказал, приложение работает на 100%, но только когда его использует один сервер.Все мои классы методов относятся к области сеанса, за исключением класса операций с базой данных, который относится к области приложения.Я полагаю, что управление рабочей нагрузкой приводит к тому, что текущая сессия иногда переходит между серверами, и это вызывает ошибку.Если кто-нибудь знает, как это исправить, я буду очень признателен.Спасибо!

РЕДАКТИРОВАТЬ: Я публикую трассировку стека.

Caused by: javax.faces.application.ViewExpiredException: /main.xhtml - No saved view state could be found for the view identifier: /main.xhtml
at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:183)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:196)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:143)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1255)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:743)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:440)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1156)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1004)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:76)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:921)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:281)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:960)
at com.ibm.cics.wlp.impl.CICSHttpRunnable.run(CICSHttpRunnable.java:244)
at com.ibm.cics.wlp.impl.CICSTaskWrapper.runWork(CICSTaskWrapper.java:701)
at com.ibm.cics.wlp.impl.CICSTaskWrapper.run(CICSTaskWrapper.java:386)

1 Ответ

0 голосов
/ 03 января 2019

Думаю, я нашел решение.Эта проблема может быть связана с тем, что для метода сохранения состояния задан сервер.Я добавил это в файл web.xml своего кода:

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
</context-param>

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

В настоящее время я пытаюсь повторить проблему.Если я не смогу сделать это, я выберу это в качестве решения.

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