Управление временем существования объекта и состоянием

Объект с пулом может участвовать в том, как COM+ управляет его действиями в пуле, реализуя IObjectControl. При создании объекта в пуле он агрегируется в более крупный объект, который будет управлять объектом, вызывая следующие методы в IObjectControl в регулярных точках жизненного цикла объекта:

  • Активация— вызывается всякий раз, когда объект возвращается клиенту, активируется в определенном контексте.
  • Деактивация— вызывается всякий раз, когда объект освобождается клиентом или в случае объекта, активируемого JIT, при его деактивации.
  • CanBePooled — вызывается всякий раз, когда объект должен возвращаться в общий пул.

Реализация IObjectControl является необязательным, за исключением транзакционных объектов, которые всегда должны реализовывать CanBePooled для отслеживания состояния удерживаемых ресурсов. Однако в большинстве случаев рекомендуется реализовать IObjectControl , так как он обеспечивает эффективный способ управления поведением объекта в пуле, как описано ниже.

Выполнение инициализации для конкретного контекста

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

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

Очистка любого состояния клиента

С помощью деактивации можно избавиться от любого состояния клиента, которое может существовать таким образом, чтобы объект возвращался в пул в полностью универсальном состоянии, а затем может использоваться любым клиентом без ущерба для безопасности или изоляции.

Управление повторным использованием объекта

С помощью CanBePooled можно отслеживать внутреннее состояние объекта и сообщать о том, подходит ли он для повторного использования. Если CanBePooled возвращает значение True и максимальный максимум пула не достигнут, объект помещается обратно в общий пул. Если CanBePooled возвращает false, объект не карта. В случае с компонентами транзакций возвращающий значение False приведет к тому, что текущая транзакция будет обречена на текущую транзакцию.

Как правило, некоторые глобальные члены данных для объекта сохраняются, и если вы обнаружите, что подключение плохо или ресурс какого-либо типа находится в плохом состоянии, установите это значение, чтобы отразить текущую ситуацию и вернуть его через CanBePooled.

Если объект не реализует CanBePooled, экземпляры будут повторно использоваться до достижения максимального уровня пула.

Строки конструктора объектов COM+

Принцип работы пула объектов

Повышение производительности с помощью пула объектов

Пул транзакционных объектов

Требования к объектам с пулом