JSF - полезная технология, но вы можете, конечно, повесить себя на нее.
Похоже, вы либо накапливаете размер состояния представления (путем установки больших значений на компонентах), либо утечки ссылок на компоненты в другое состояние сеанса (что было бы плохо). Еще одним потенциальным виновником будет чрезмерно большой взгляд (я видел, как легкость, с которой люди могут создавать деревья UI, ведет к очень большим графикам управления со всеми таблицами данных). Я знаю, что IBM предоставляет расширенные текстовые и электронные таблицы - я не могу прокомментировать, какое влияние их использование будет иметь на размер штата.
Низкие висячие фрукты - это проверка управляемых компонентов, сконфигурированных для области сеанса в faces-config.xml.
JSF сохраняет две вещи между запросами:
- вид (все элементы управления на странице)
- состояние представления (состояние управления)
Они разделены, потому что некоторые элементы управления, такие как дети таблицы данных, могут иметь несколько состояний (по одному для каждой строки). Состояние может быть сохранено либо в скрытом поле формы (которое, если оно не зашифровано, может быть большой угрозой безопасности) или в сеансе. Чтобы разместить несколько окон браузера, совместно использующих один и тот же сеанс (а в некоторых реализациях - поддержка кнопки «Назад»), сохраняются несколько представлений.
- Должна быть опция конфигурации для установки количества состояний представления, которые приложение будет хранить в сеансе для данного пользователя в любой момент времени.
- Вы можете измерить размер состояния просмотра, предоставив StateManager, который измеряет размер сохраненного вида/состояния (сконфигурируйте StateManager в faces-config.xml с открытым конструктором, который принимает StateManager - см. PDF-файлы JSF spec для более подробной информации; состояние сериализуемо, и вы можете проверить его размер, сбросив его в поток).
Большинство IDS-приложений JSF поддерживают бобы. Было бы возможно, что при использовании области сеансового соединения удерживать состояние дольше, чем вы хотите, создавая нагрузку на сеанс. Поскольку на одной странице есть один бэк-файл, тем больше страниц у вас есть, тем больше проблема будет. Проверьте свой faces-config.xml, чтобы узнать, является ли это потенциальным источником проблем.
Что-то еще, что вы могли бы сделать, это настроить HttpSessionAttributeListener на ваш web.xml. Вы можете получить stack trace, чтобы помочь выявить проблемные области в вашем приложении.
только личное мнение, но я думаю, что недостаток лежит на IBM, а также на их реализацию JSF. Я не могу оправдать свои чувства :) – guyumu
Тот, который я видел, не использовал Sun JVM и реализацию Apache JSF. Apache - это IBM, поэтому я не могу сказать, как они отличаются друг от друга. Я думаю, что это модель JSF - мне кажется очень тяжелой. – duffymo