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

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

Служба без отслеживания

Чтобы обеспечить безопасность, согласованность и изоляцию, объекты, доступные для пула, не должны содержать состояния, относящиеся к клиенту, от клиента к клиенту. Вы можете управлять любым состоянием клиента с помощью IObjectControl, выполняя инициализацию с определенным контекстом с помощью IObjectControl::Активация и очистка любого состояния клиента с помощью IObjectControl::D eactivate. Дополнительные сведения см. в разделе "Управление временем существования объекта и состоянием".

Нет сходства потоков

Объекты, доступные в пуле, не могут быть привязаны к определенному потоку; в противном случае производительность может быть потенциально катастрофическим. По этой причине объекты, доступные для пула, нельзя пометить для запуска в модели квартиры; они должны работать в многопоточной квартире или нейтральной квартире. Кроме того, объекты, доступные в пуле, не должны использовать локальное хранилище потоков и не должны агрегировать маршалер свободного потока. Дополнительные сведения о потоке в COM+см. в разделе "Модели потоков COM+".

Примечание.

Microsoft Visual Basic 6.0 и более ранних сред разработки могут создавать только компоненты модели квартиры. Однако в Visual Basic .NET компоненты можно использовать в пуле.

 

Aggregatable

Объекты, доступные в пуле, должны поддерживать агрегирование, т. е. они должны поддерживать создание путем вызова CoCreateInstance с аргументом pUnkOuter, отличного от NULL. Когда COM+ активирует объект в пуле, он создает агрегат для управления временем существования объекта в пуле и вызова методов в IObjectControl. Дополнительные сведения о написании агрегируемых объектов см. в разделе "Агрегирование".

Компоненты транзакций

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

Реализация IObjectControl для управления временем существования объекта

Объекты, доступные в пуле, должны реализовывать IObjectControl, хотя это не обязательно. Однако компоненты транзакций, объединенные в пул, должны реализовать IObjectControl. Эти компоненты должны отслеживать состояние удерживаемых ресурсов и указывать, когда их нельзя повторно использовать; Когда IObjectControl::CanBePooled возвращает значение false, это приведет к созданию транзакции. Дополнительные сведения см. в разделе "Управление временем существования объекта и состоянием".

Ограничения языка

Компоненты, разработанные с помощью Microsoft Visual Basic 6.0 и более ранних версий, нельзя использовать в пуле, так как эти компоненты будут потоковой моделью квартиры. Однако в Visual Basic .NET компоненты можно использовать в пуле.

Устаревшие компоненты

Если они не являются транзакциональными и соответствуют соответствующим требованиям, компоненты можно объединять в пул, даже если они не были написаны с учетом возможностей пула. Не обязательно реализовать IObjectControl; компонент, который не делает этого, просто не будет участвовать в управлении его временем существования. Если IObjectControl::CanBePooled не реализован, объект будет повторно использоваться до достижения максимального размера пула.

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

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

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

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

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