JSF - полезная технология, но вы, безусловно, можете повеситься с ней.
Звучит так, что либо вы увеличиваете размер состояния просмотра (устанавливая большие значения для компонентов), либо вы просачиваете ссылки на компоненты в другое состояние сеанса (что было бы плохо). Другим потенциальным виновником может быть чрезмерно большое представление (я видел, как легко люди могут создавать деревья пользовательского интерфейса, что приводит к очень большим контрольным графам с таблицами данных повсюду). Я знаю, что IBM предоставляет элементы управления расширенным текстом и электронными таблицами - я не могу комментировать, как их использование повлияет на размер состояния.
Низко висящим плодом является проверка управляемых bean-компонентов, настроенных для области сеанса, в face-config.xml .
JSF сохраняет две вещи между запросами:
- просмотр (все элементы управления на странице)
- состояние просмотра (состояние элементов управления)
Они разделены, потому что некоторые элементы управления, такие как дочерние элементы таблицы данных, могут иметь несколько состояний (по одному для каждой строки). Состояние может быть сохранено либо в скрытом поле формы (которое, если оно не зашифровано, может представлять серьезную угрозу безопасности), либо в сеансе. Чтобы разместить несколько окон браузера, совместно использующих один и тот же сеанс (и, в некоторых реализациях, поддержку кнопки «Назад»), сохраняется несколько представлений.
- Должна быть опция конфигурации для установки количества состояний просмотра, которые приложение будет хранить в сеансе для данного пользователя в любой момент времени.
- Вы можете измерить размер состояния представления, предоставив StateManager , который измеряет размер сохраненного представления / состояния (настройте StateManager вface-config.xml с помощью открытого конструктора, который принимает StateManager - см. JSF spec PDF для получения дополнительной информации; состояние сериализуемо, и вы можете проверить его размер, выгрузив его в поток).
Большинство встроенных в IDE JSF-приложений имеют резервные компоненты. Возможно, с помощью области действия сессионного компонента удерживать состояние дольше, чем вы хотите, создавая нагрузку на сессию. Поскольку на страницу обычно приходится один компонент поддержки, чем больше у вас страниц, тем больше будет проблема. Проверьте Face-config.xml , чтобы увидеть, если это потенциальный источник проблем.
Что еще можно сделать, это настроить HttpSessionAttributeListener в вашем web.xml . Вы можете получить трассировку стека , чтобы помочь определить проблемные области в вашем приложении.