|
| ||||||||||||
| ||||||||||||
|
2005 г.
Технология COM+ (Microsoft Transaction Server)Евгений Марков, Генеральная Сервисная Компания (Санкт-Петербург)
Для распределенных приложений большое значение имеют вопросы обеспечения надежности, производительности, масштабируемости. Технология COM+ (старое название Microsoft Transaction Server, MTS) входит в состав серверных операционных систем Microsoft и предназначена для поддержки систем обработки транзакций. COM+ может устанавливаться и работать на компьютерах с операционными системами Windows 95/98, Windows NT, Windows XP, Windows 2000, Windows 2003. Однако необходимо отметить, что система безопасности транзакций не реализована для операционных систем Windows 95/98 вследствие объективных ограничений, накладываемых этими системами. Технология COM+ базируется на возможностях COM и обеспечивает поддержку распределенных приложений на компонентной основе. Объекты транзакций COM+ обладают основными свойствами объектов COM. Кроме этого, объекты транзакций реализуют специфические возможности, присущие только объектам MTS:
Как работает COM+Итак, COM+ - это совокупность программных средств, обеспечивающих разработку, распространение и функционирование распределенных приложений для сетей Интернет и интранет. В ее состав входят:
Разработчики, использующие COM+ в своих приложениях, создают объекты бизнес-логики, удовлетворяющие требованиям к объектам COM+; затем компилируют их и устанавливают в среде COM+ при помощи пакетов. Пакет COM+ представляет собой контейнер, обеспечивающий группировку объектов в целях защиты данных, улучшения управления ресурсами и увеличения производительности. Управление пакетами осуществляется при помощи утилиты MTS Explorer. Объект COM+Так как технология COM+ основана на COM, ее объекты должны удовлетворять основным требованиям к объектам COM. Помимо этого объекты COM+ имеют ряд особенностей:
Сохранение состояния объекта требует, чтобы тот оставался активным и сохранял такие ценные ресурсы как, например, соединение с базой данных. На практике это означает не что иное, как работу с глобальными переменными, потому что именно в них хранится промежуточное состояние объекта. Если объект не может сохранять свое промежуточное состояние, то он относится к типу stateless. Объекты этого типа более эффективны. Когда транзакция успешно завершена или прервана, все объекты, вовлеченные в транзакцию, деактивируются и, соответственно, теряют информацию о своем состоянии, приобретенную во время транзакции. Это помогает убедиться в изоляции транзакции и согласованности базы данных, а также освобождает ресурсы сервера для использования другими транзакциями. Завершение транзакции позволяет COM+ деактивировать объект и обновить ресурсы. ТранзакцииСпособность объекта COM+ "жить" внутри своей собственной транзакции или быть частью большой группы аналогичных объектов, которые принадлежат одной транзакции, - огромное преимущество COM+. Это позволяет применять компонент для решения различных задач, таким образом, что разработчики могут использовать код заново без модернизации логики приложения. Транзакции COM+ гарантируют, что:
ItransactionContext. Однако существует возможность и автоматического управления транзакциями.
Атрибуты транзакций можно устанавливать тремя способами:
Контекст объекта COM+Для каждого объекта транзакции сервер транзакций автоматически создает специальный объект, который носит название объект контекста транзакции или контекст объекта COM+. Функциональность контекста обеспечивается интерфейсомIobjectContext.
Два метода интерфейса определяют способ выхода объекта из транзакции. Метод Использование метода После использования любого из этих двух методов объект завершает свое участие в транзакции. Методы
Вызов метода При помощи перечисленных методов объект контекста обеспечивает среду COM+ информацией о состоянии объекта транзакции. Например, распределитель ресурсов может использовать контекст объекта COM+ для обеспечения сервисов на основе транзакций. Пусть объект выполняется внутри транзакции, которая зарезервировала соединение с базой данных, используя провайдер ADO. Это соединение автоматически организует транзакцию. Все изменения в базе данных, использующие такое соединение, становятся частью транзакции и затем либо принимаются, либо откатываются.
Дополнительно разработчики могут использовать несколько вспомогательных методов интерфейса Безопасность данныхОдним из удобных сервисов, предоставляемых COM+, является реализация возможности обеспечить доступ к компонентам (и даже к отдельным интерфейсам) в зависимости от прав, которыми обладает клиент. Безопасность COM+ состоит из двух частей:
Декларативная защита данныхДекларативная защита данных создается на этапе настройки среды COM+ и выполняется средствами утилиты MTS Explorer. Она заключается в ограничении доступа к тому или иному объекту или пакету для пользователей и групп, являющихся членами тех или иных ролей.По умолчанию в среде COM+ настроен пакет System Package, для которого предопределены две роли: администратора (Administrator) и читателя (Reader). Перед началом работы необходимо связать роль администратора с хотя бы одной учетной записью. Программная защита данныхПрограммная защита данных обеспечивается объектом контекста (см. выше) и методамиIsSecurityEnabled и IsCallerInRole интерфейса IobjectContext этого объекта. Программная защита данных проектируется на этапе разработки приложения и исполняется при функционировании приложения, использующего данный объект COM+.
Когда приложение пытается использовать некоторый объект COM+, необходимо применить метод Если же несколько объектов MTS используются в рамках одного процесса, метод РесурсыДля управления ресурсами MTS использует три способа:
Активизация Just-in-timeСпособность объекта быть деактивированным и повторно активированным, пока клиент сохраняет ссылку на него, называется активизацией Just-in-time.В процессе работы приложения часто бывает необходимо использовать один экземпляр объекта COM+ несколько раз через определенные промежутки времени. При обращении к объекту он активизируется, а некоторое время после прекращения использования приложение удерживает ссылку на неиспользуемый объект. Когда создается объект как часть среды COM+, также создается соответствующий контекст объекта. Этот контекст объекта существует в течение всего времени жизни соответствующего объекта COM+, через один или несколько циклов. COM+ использует контекст объекта для сохранения информации о нем при деактивизации. Объект создается в неактивном состоянии и становится активным только после запроса клиента. Когда объект становится неактивным, среда уничтожает все ресурсы объекта, в том числе, например, соединение к базе данных. Объект COM+ становится неактивным при возникновении следующих событий:
Пулинг ресурсовПосле освобождения ресурсов при деактивизации объекта COM+ они становятся доступными для других серверных объектов. Этот процесс называется пулингом ресурсов.Рассмотрим, например, соединение с базой данных через провайдер ADO. Известно, что выделение ресурсов, открытие и закрытие соединения с базой данных занимает довольно много времени. Частое повторение этой операции различными объектами COM+ применительно к одной базе данных вызовет повышенный расход ресурсов. Именно в таких случаях и используется пулинг ресурсов. Соединение с базой данных, больше не используемое одним серверным объектом, может быть использовано другим объектом. Для выполнения задач пулинга ресурсов COM+ использует распределитель ресурсов. Освобождение ресурсовОбычно освобождение ресурсов объекта делается при помощи вызова методовSetComplete и SetAbort после обслуживания запроса клиента. Эти методы освобождают ресурсы, зарезервированные распределителем ресурсов COM+.
В то же самое время необходимо освобождать ссылки на другие ресурсы, включая ссылки на другие объекты (и объекты COM+ и контексты объектов) и память, занятую экземплярами компонентов. Этого не следует делать лишь в случае, если надо сохранить информацию о состоянии между вызовами клиентов. Пулинг объектовCOM+ реализует не только пулинг ресурсов, но и пулинг объектов. Правда, эта возможность доступна только в рамках технологии COM+, работающей под управлением операционных систем Windows 2000 и Windows 2003. В COM+ более старых версий пулинг объектов лишь декларирован для будущего использования.
Суть этого механизма проста. При выполнении приложений в среде COM+ создается специальный пул объектов. Для управления пулом и размещения в нем объектов используется интерфейс Тестирование и установка компонентов COM+При настройке среды COM+ среди многих параметров администратор может задавать время пребывания объекта транзакции в активном состоянии без вызовов со стороны клиентов. Это параметр transaction timeout. По умолчанию это время равно 60 секундам.При отладке объектов COM+ необходимо отключить этот параметр (присвоить значение, равное нулю), иначе объект может быть выгружен средой, пока вы работаете с исходным кодом или значениями переменных в процессе отладки. В стадии разработки компонент нельзя перекомпилировать, пока он находится в памяти. В этом случае появится сообщение об ошибке "Cannot write to DLL while executable is loaded.". Для устранения такой ситуации необходимо с использованием MTS Explorer установить в свойствах пакета параметр shut down after being idle for 3 minutes, изменив соответственно время. Для этого надо:
Оптимизация работы с COM+Разработать приложение, использующее COM+, формально просто. Более сложной задачей является проектирование приложения таким образом, когда оно не только работает, но и приносит максимальный эффект от своей работы, воплощая все возможности используемой технологии. Для этого надо хорошо представлять механизм работы объектов COM и принципы работы с транзакциями.Блокировка транзакцийОдним из основных принципов грамотного управления транзакциями является их изоляция. Для достижения этого используются различные механизмы блокировок влияния транзакций друг на друга. COM+ реализует систему изоляции транзакций на высоком уровне. Пока данные в одной транзакции не будут обработаны, они не видны в другой транзакции. Таким образом, снижается производительность системы. Для решения проблемы необходимо свести время работы каждой транзакции к минимуму и не забывать о правильном использовании таких методов, какSetComplete и SetAbort интерфейса IobjectContext (см. выше).
Действия COM+Кроме этого, одним из наиболее важных и фундаментальных аспектов программирования для COM+ является такое понятие, как "действие" (activity). Очень часто на правильное использование действий не обращают серьезного внимания, хотя именно из-за неправильной работы с действиями возникают некоторые проблемы и трудности.Действие - это совокупность объектов, которые действуют сообща в интересах единственного клиента. Действие может содержать объекты из разных пакетов. Каждый объект COM+ существует только в одном действии, хотя действие может содержать несколько объектов. Каждая транзакция существует только в одном действии, хотя действие может содержать несколько транзакций. Программирование для COM+ подразумевает, что объекты COM+ не должны разделяться между действиями. Параллельное использование объектов внутри действия очень опасно, поскольку возможна ситуация, когда объект, работающий в интересах одного потока, может попытаться принять транзакцию, пока объект, работающий в интересах второго потока, находится в процессе выполнения работы внутри той же транзакции. Если транзакция была действительно принята, это привело бы к фиксации частично выполненной транзакции. |
|
CITForum © 1997–2025