javax.faces.application.ViewExpiredException: во время нагрузочного теста

Мы используем SUN JSF 1.2, WebSphere 7.0 для нашего приложения, мы получаем ViewExpiredException только во время нагрузочного тестирования.

Я прошел по ссылке ниже

javax.faces.application.ViewExpiredException: просмотр может не восстановить

Следил за большинством вещей,

  1. Установка параметра контекста,

    com.sun.faces.enableRestoreView11Compatibility true

  2. Проинструктировал браузер не кэшировать динамические страницы JSF, добавив приведенный ниже код поверх всех страниц JSP,

        res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 
        res.setHeader("Pragma", "no-cache");
        res.setDateHeader("Expires", -1); 
    

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

Пожалуйста, совет.


person Hariharbalaji    schedule 31.07.2012    source источник


Ответы (1)


Представления сохраняются в сеансе. По умолчанию максимальное количество просмотров, сохраняемых в сеансе, равно 15, что в Mojarra настраивается с помощью параметра контекста com.sun.faces.numberOfViewsInSession.

Представьте себе ситуацию, когда конечный пользователь открывает случайную страницу JSF с формой (которая фактически является одним представлением) по крайней мере в 16 разных вкладках/окнах браузера в одном сеансе. Отправка формы в первой открытой вкладке/окне вызовет ViewExpiredException. Возможно, то же самое происходит и при нагрузочном тестировании. Нагрузочное тестирование должно было создать разные сеансы.

Как указано в ответе, который вы нашли сами, единственное исправление для этого - установить для метода сохранения состояния JSF значение client вместо server. Отключение кеша браузера просто предотвращает ViewExpiredException, которое возникает на страницах, которые конечный пользователь получил из кеша браузера (например, нажав кнопку «Назад» и т. д.).

person BalusC    schedule 31.07.2012
comment
Но BalusC, в качестве настройки производительности, в большинстве ссылок, которые он упомянул, чтобы сохранить на стороне сервера, это хорошо по сравнению с сохранением на стороне клиента. Так что надо учитывать и это. - person Hariharbalaji; 31.07.2012
comment
Я нигде не говорил, что сохранение состояния на стороне клиента выполняется быстрее, чем сохранение состояния на стороне сервера. Я только сказал, что единственным исправлением для конкретного ViewExpiredException является использование сохранения состояния на стороне клиента. Использовать его или нет решать вам. - person BalusC; 31.07.2012
comment
Прости! из-за путаницы я не собирался говорить, что вы сказали, что сохранение состояния на стороне клиента выполняется быстрее, чем сохранение состояния на стороне сервера. Я просто спросил предложение. Спасибо - person Hariharbalaji; 31.07.2012