Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Компоненты транзакций, которые должны быть включены в пул, имеют особые требования.
Ручное перечисление ресурсов
Пуловые объекты, участвующие в транзакциях, должны вручную подключать управляемые ресурсы. Если объект содержит управляемые ресурсы между клиентами, диспетчер ресурсов не сможет автоматически заручиться транзакцией при активации объекта в заданном контексте.
Сам объект должен справляться с задачей обнаружения транзакции, отключения автоматического присоединения диспетчера ресурсов и ручного присоединения всех ресурсов, которыми он владеет. Действия по выполнению этого зависят от используемого диспетчера ресурсов. Если вам нужно выполнить ручную регистрацию, обратитесь к документации по вашему диспетчеру ресурсов.
Как описано ниже, объекты могут быть объединены с транзакционной аффинностью, пока транзакция активна, и их можно активировать с транзакционной аффинностью, если они вызываются клиентом, связанным с этой транзакцией. Перед зачислением ресурсов необходимо сначала проверить сходство транзакций. Если объект был взят из пула, относящегося к этой транзакции, он уже выполнил работу в этой транзакции и зарегистрировал свои ресурсы.
Отключение автоматического внесения в список
Автоматическое зачисление должно быть отключено после получения ресурса, как правило, в конструкторе объекта. То есть вы отключаете автоматическое включение, а затем подключаетесь.
Отключение автоматического перечисления иногда может быть тонкой процедурой, особенно в случае с многоуровневыми поставщиками доступа к данным. Автоматическое подключение иногда связано с пулом подключений, например, в случае с ODBC, а иногда не связано, как с OLE DB. Возможно, потребуется убедиться, что авто-присоединение отключено на различных уровнях провайдеров.
Реализация IObjectControl
Объекты, которые можно объединять в пул, участвующие в транзакциях, должны отслеживать текущее состояние ресурсов, которыми они управляют. Если объект обнаруживает, что он находится в состоянии, непригодном для повторного использования, например, если подключение плохое, он должен возвращать false для IObjectControl::CanBePooled. Это приведет к отказу экземпляра объекта и обречению текущей транзакции.
пулы Transaction-Specific
Пул объектов, как правило, однороден, и любой неиспользуемый в данный момент объект может быть возвращён любому клиенту. Единственным исключением из этого правила является случай транзакционных объектов, для которых оптимизирован пул объектов. Когда клиент запрашивает объект, связанный с транзакцией, COM+ сканирует пул в поисках доступного объекта, который уже связан с этой транзакцией. Если объект с сходством транзакций найден, он возвращается клиенту; в противном случае возвращается объект из общего пула.
Таким образом, специальные подпули поддерживаются, содержащие объекты с сходством для конкретной транзакции. Когда транзакция завершается или прерывается, эти объекты возвращаются в общий пул, без привязки к транзакции, готовые к использованию любым клиентом.
По этой причине, когда компонент вручную регистрирует свои управляемые ресурсы в транзакции, сначала необходимо проверить, уже ли они зарегистрированы. В этом случае нет необходимости входить в список.
Связанные разделы
-
требования для объектов с пулом