2013-09-04 3 views
2

В соответствии с документацией,

Глобальный: Компонент разделяется между всеми пользователями. Сессия: Отдельные экземпляры компонента предоставляются каждому пользователю.

Это означает, для глобального компонента, существует только один экземпляр для всей системы ядра .. Если это так, как делает это справедливо для компонентов, таких как «/ ATG/динамо/операции/TransactionManager» и большая часть капель ..? Поскольку эти компоненты используются несколькими пользователями в один момент

Отредактировано:

я понял поведение «TransactionManager». Согласно определению должен быть один диспетчер транзакций, и он должен хранить объекты транзакций в каждой транзакции. Но мой вопрос по-прежнему применим для капель, таких как, foreach, switch и т. Д. (Большинство из них в глобальном масштабе) Если есть только один экземпляр соответствующего класса для всей системы ядра, разве это не имеет плохих последствий для производительности?

ответ

6

Исторически в ATG существовало три различных типа сферы. Теперь это увеличилось до 5 с добавлением окна (обычно используется только в приложении CSC, поэтому постарайтесь не использовать его) и Prototype (добавлено для поддержки использования обработчиков картриджей Endeca).

Как вы выделили из документации, глобальный компонент создается один раз и используется всеми пользователями, а компонент сеанса создается один раз для данного сеанса и используется всеми запросами этого сеанса. Точно так же компонент, связанный с запросом, только что создан для каждого запроса, который его использует.

С точки зрения производительности, разрешение пути к существующему компоненту (например, компоненту, охваченному глобальными областями, например, ForEach), занимает немного времени, но создание экземпляра нового объекта (другими словами, компонента с охватом запроса) сравнительно более дорогой.

Таким образом, в случае ForEach капельки он получает экземпляр один раз, но в методе service он фактически извлекает параметры из запроса:

String elementName = pRequest.getParameter(ELEMENT_NAME); 

Это означает, что глобальная область компонента потокобезопасно в том, что он принимает только параметр из текущего запроса. Таким образом, в общем случае, если компонент может использоваться несколькими пользователями, не беспокоясь о синхронизации, он должен обладать глобальным охватом по сравнению с сеансом или областью запросов. (Правило большого пальца должно состоять в том, что если ваша капля - это область запроса, вы, вероятно, ошибаетесь).

+0

Действительно хороший ответ, этот ответ разрешил мой вопрос. –

1

Если вы знаете о шаблонах проектирования, то $ scope = global является эквивалентом того, что компонент ATG является одиночным.

1

ATG Commerce имеет 4 различные области применения компонентов

  1. Global: Это сфера по умолчанию компонента, если область не определена. Эти компоненты будут инициализированы один раз и будут находиться в качестве глобального объекта .Лучше всего использовать все капли, инструменты, Менеджер и другие компоненты конфигурации как глобальные
  2. Сессия. Объем и поддерживаемые значения будут уникальными для каждого сеанса . Обычно используются компоненты области сеанса: ShoppingCart (Заказ), Профиль, SearchFormHandler и т. Д.
  3. Запрос: Объем и поддерживаемые значения будут уникальными для каждого запроса. Компоненты области запроса обычно используются FormHandlers для обработки отдельных запросов.
  4. Окно: Объем и поддерживаемые значения будут уникальными до , окно браузера закрывается. Компоненты сферы применения Window
    обычно используется в приложении CSC для ShoppingCart компонента и т.д .. Это хорошо использовать компоненты с любым масштабом на основе бизнес-
    требования, но имеющий он объявлен как Global и его использование будет benificial для повышения производительности приложения. Это правило большого пальца имеет бизнес-логику в компонентах глобальной области видимости и ссылается на нее из компонентов с более низкой областью, если это необходимо. Это уменьшит количество потоков, ожидающих сбора мусора.

 Смежные вопросы

  • Нет связанных вопросов^_^