Вопрос немного давно, так как это концептуально. Я надеюсь, что это не плохое чтение:)
Я работаю в критически важном по производительности веб-приложении Spring MVC / Tiles (обычная нагрузка 10 000 пользователей). Мы загружаем экран обновления сотрудника, где мы загружаем экран сведений о сотруднике (связанный с бизнес-объектом сотрудника) для обновлений через MultiActionController. На этом экране есть несколько вкладок, но только вкладка 1 содержит данные обновляемой страницы. Остальные вкладки предназначены только для чтения, для справки.
Излишне говорить, что мы решили загружать эти вкладки только для чтения ленивым образом, то есть, когда каждая вкладка активирована, мы запускаем ajax-вызов (однократно) для получения данных с сервера. Мы не загружаем все через метод загрузки вида обновления. Помните: это одноразовые данные только для чтения.
Теперь у меня дилемма. Я сделал еще один контроллер мультиакций, названный «AjaxController» для обработки этих вызовов ajax. Теперь мои вопросы:
- Какой должна быть лучшая область действия для этого контроллера?
Мысли: если я сделаю запрос в области, то 10000 пользователей вместе могут создать 10000 экземпляров этого компонента: проблема с памятью. Если я сделаю это сферой, то для каждой сессии пользователя будет создан один. Это означает, что когда 10 000 пользователей входят в приложение, независимо от того, используют ли они методы AjaxController, у каждого из них будет свой бин.
- Тогда, является ли синглтон лучшей областью для этого контроллера?
Мысли: при загрузке пружины будет создан синглтон, и этот самый экземпляр будет представлен повсюду. Звучит хорошо.
- Должны ли методы-обработчики (такие как fetchTab7DataInJsonFormat) быть статическими и присоединенными к классу?
Мысли: в этом случае могут ли статические методы смещаться семантически в конфликт с областью действия? Например: имеет ли смысл область = "сессия" / "запрос" + статические методы? Я спрашиваю, потому что, хотя каждый пользовательский сеанс имеет свой собственный компонент AjaxController, методы-обработчики на самом деле привязаны к классу, а не к экземплярам. Кроме того, имеют ли смысл методы scope = "singleton" + static обработчик?
- Можно ли внедрить шаблон одноэлементного проектирования в AjaxController вручную?
Мысли: Что делать, если я контролирую создание: в основном, синглтон GoF. Тогда что может сделать спецификация области? Scope Session / Request не может создать несколько экземпляров, не так ли?
- Если по какому-либо механизму (спецификация бина / шаблон проектирования / статические методы) мне удастся иметь один единственный экземпляр AjaxController: нужно ли будет синхронизировать эти методы STATIC? Я думаю, что нет, потому что даже если методы-обработчики STATIC могут взаимодействовать со службами (которые взаимодействуют с DB / WS / MQ и т. Д.), Что требует времени, я думаю, что каждый поток запроса, входящий в статические методы, будет возвращен их идентификатором потока, верно? Не похоже, что user1 входит в статический метод, а затем user2 входит в статический метод до того, как user1 был возвращен, и затем они оба получают некоторые искаженные данные? Это, наверное, глупо, но я хочу быть уверенным.
Я в замешательстве. Я в основном хочу, чтобы только один экземпляр компонента контроллера обслуживал все запросы для всех клиентов.
Критическое примечание: bean-компонент AjaxController нигде больше не INJECTED, он существует изолированно. Это методы, используемые через вызовы ajax.