Транзакции SQLBase 8.0 и COM+Сурен Бехари, Gupta LLC.
Обзорные сведенияВ данном материале обсуждается Microsoft Transaction Server (MTS), а также вопросы реализации поддержки транзакций COM+ программой SQLBase 8.0 также известных под названием MTS). Приводятся примеры приложений COM+. ВведениеВ наши дни транзакции больше не ограничены пределами базы данных. Транзакции отвечают за осуществление сложных бизнес-процессов, что подразумевает обновление баз данных, принадлежащих различным поставщикам и способных располагаться далеко друг от друга. Поддержка транзакций SQLBase COM+ позволяет полностью интегрировать SQLBase и транзакции COM+, включая полную поддержку фиксации и отката для всей транзакции в целом. Для создания транзакций COM+ могут применяться многие языки программирования, включая Team Developer. Так, например, одна составная транзакция может отвечать за перенос денежных средств со счета в местном банке (SQLBase) на центральный счет (Microsoft SQL Server). Эта транзакция может завершиться либо успехом, либо неудачей. В последнем случае откат производится во всех базах данных, участвующих в транзакции. Поддержка Microsoft Transaction Server (MTS)Прежде чем перейти к проблеме создания приложений MTS для SQLBase 8.0 с использованием разработанного компанией Gupta Technologies средства разработки на языке четвертого поколения 4GL, Team Developer (или любого другого языка разработки, такого как Visual C++, Visual Basic, Delphi и Power Builder), следует определить значение некоторых понятий:
Что такое MTS?MTS сочетает в себе брокер объектных запросов (ORB), менеджер ресурсов и монитор транзакций. MTS - это распределенная среда времени выполнения для объектов COM, обеспечивающая инфраструктуру для операций с объектами в сети. Она состоит из брокера объектных запросов (ORB), администратора ресурсов и монитора транзакций. MTS поддерживает автоматическое управление транзакциями, организацию связного пула обращений к базам данных, изоляцию процессов, автоматическое помещение потоков в пул, автоматизацию управления экземплярами объектов, совместное использование ресурсов, систему безопасности, основанную на принципе ролей, мониторинг транзакций в рамках распределенного приложения и т. д. Эти сервисы необходимы для масштабирования компонентов, расположенных на сервере, и поддержки значительного числа одновременных клиентских запросов. Все сервисы автоматизированы, и разработчикам приложений не требуется писать код специально для них. Исходя из этого, программисты могут создавать такие компоненты для размещения на сервере, которые будут действовать так, будто одновременно к серверу подключается только один клиент. Архитектура MTSMTS - это псевдопроцесс DLL. Компоненты сервера DLL загружаются в псевдопроцесс MTS (MTSx.exe) вместе с управляющей программой MTS (MTSxex.dll). Team Developer можно применять для построения объекта MTS по образцу DLL. MTS создает "программы-заместители" для клиентов. Для управления экземплярами компонентов, установленных под контролем MTS, создается "родственный" исходному объект (так называемый "контекстный объект"), интерфейс которого представлен IObjectContext. IObjectContext применяется для подтверждения или отмены связанных с объектом транзакций, их блокировки/деблокировки, а также проверки безопасности вызывающей программы компонента. Контекст содержит сведения о среде времени выполнения объекта (например, имя автора объекта и - по желанию - название транзакции, описывающей сферу действий объекта). Объект MTS и связанный с ним контекстный объект имеют схожие жизненные циклы. MTS создает контекст перед созданием объекта MTS и удаляет его после удаления объекта MTS. MTS координирует обмен данными между компонентами и базами данных в рамках набора заранее установленных соединений (создание связанного пула). Клиенты MTS создают компоненты MTS с помощью COM и поручают управление их выполнением MTS. Клиентам направляется информация о последовательности событий MTS и статусе транзакции ("успешное завершение/откат"). Операцией называется набор объектов MTS, связанных единым распределенным потоком последовательного выполнения. Объект MTS может относиться только к одной операции. COM+ (COM в сочетании с новой версией MTS в ОС Windows 2000) обладает следующими функциями:
Распределенные транзакцииПримером такой транзакции может послужить обновление базы данных (БД), когда ряд событий приводит к изменению значений ряда переменных, хранящихся в БД. Чтобы сохранить изменения, требуется подтвердить обновление. В противном случае, требуется выполнить откат обновления. После этого транзакция считается завершенной. Весь этот процесс можно рассматривать в качестве одиночной транзакции. Ниже объясняются свойства ACID, определяющие одиночные и распределенные транзакции. Свойства ACIDACID - это акроним, который служит для описания 4 определяющих транзакцию свойств ("атомарная", "непротиворечивая", "изолированная" и "устойчивая"). Дадим определение каждому из них. Для этого возьмем ситуацию, когда для обновления сведений о клиенте требуется обновить данные в трех таблицах ("имя клиента", "адрес клиента" и "контактная информация"). Принцип "всё или ничего""Атомарность" предполагает успешное завершение транзакции лишь тогда, когда успешно/полностью проводится каждое действие в определяемой транзакцией цепочке. В противном случае транзакция считается недействительной. Обратимся к нашему примеру. Если в адресной таблице информацию не удается обновить, в то время как в остальных таблицах эта процедура проходит успешно, то это приведет к откату транзакции. Таким образом, фиксация транзакции может иметь место лишь в случае успешного обновления данных во всех 3 таблицах. Принцип сохранения исходного состояния данных до завершения транзакцииТермин " непротиворечивость " означает необходимость сохранения первоначального состояния данных до полного завершения транзакции. Обратимся к выбранному примеру. Исходные значения во всех обновляемых таблицах должны быть записаны с тем, чтобы восстановить их в случае отката транзакции. Принцип независимости от других транзакцийТермин " изолированность " означает, что каждая транзакция должна выполняться так, будто это единственная выполняемая транзакция, которая не зависит от других. Предположим, что обновление всех 3 таблиц прошло успешно, и никто другой не пытался обновить их. В таком случае она не должна влиять или испытывать влияние со стороны какой-либо иной транзакции. Принцип зависимости фиксации/отката от бесконфликтного успехаЧто означает термин " устойчивость "? Это значит, что если все события успешно завершены, то транзакция обязательно подлежит фиксации, но если хотя бы одно действие потерпело неудачу, то транзакция обязательно подлежит откату. Вернемся к нашему примеру. Если удалось обновить все строки таблицы, то для сохранения изменений в базе данных транзакция фиксируется. С другой стороны, если в процессе одного из обновлений произошла ошибка, для всей транзакции выполняется процедура отката, и значения показателей в строках таблиц остаются прежними. Компоненты распределенных транзакций в SQLBase 8.0Как мы уже упоминали ранее, для фиксации распределенной транзакции все событийные цепочки, входящие в состав транзакции, должны быть успешно завершены. Приводимая ниже диаграмма иллюстрирует связи между активными составными частями варианта среды для выполнения распределенных транзакций. В данном разделе будут определены и обсуждены следующие компоненты: координатор распределенных транзакций (DTC), SQLBrm (администратор ресурсов SQLBase), а также использование технологии OLE DB для обмена данными между SQLBrm и базой данных SQLBase. Координатор распределенных транзакций (DTC)Компания Microsoft включила в состав ОС Windows 2000 инструмент Distributed Transaction Coordinator (DTC), который можно найти в группе "Component Services" меню "Administrative Tools". Назначение данного средства администрирования состоит в координации работы компонентов, участвующих в транзакции. Для каждого компьютера, вовлеченного в транзакцию, DTC выступает в роли диспетчера транзакций. Основной задачей такого диспетчера является регистрация событий и компонентов, принимающих участие в транзакции, а также обеспечение транзакции уникальным идентификатором, который может применяться для обозначения компонентов транзакции. Кроме того, диспетчер транзакций отвечает за управление результатами транзакций. После успешного завершения каждого из событий и транзакции в целом, диспетчер выполняет процедуру двухфазной фиксации транзакции (см. ниже). Двухфазная фиксацияФаза 1 Диспетчер транзакций запрашивает статус каждого из вовлеченных в транзакцию компонентов (ожидаемый успех/неудача операции). Фаза 2 (сценарий 1) Если каждый из опрошенных компонентов сообщит об успехе операции, диспетчер фиксирует новый статус для каждого компонента и для всей транзакции в целом. Если один или несколько участвующих в транзакции компонентов сообщает о неудаче операции, диспетчер транзакций отменяет всю транзакцию, что может повлечь за собой отмену изменений, относящихся к содержимому баз данных. SQLBrm - администратор ресурсов SQLBaseРоль компонента SQLBrm ясна из его названия. SQLBrm отвечает за управление таким ресурсом как база данных Gupta SQLBase. Администратор ресурсов обеспечивает операции с восстанавливаемым ресурсом, который должен иметь возможность работать подобно транзакции и обладать всеми вышеописанными свойствами ACID. SQLBrm администрирует коммуникационные потоки, создавая их или переводя в режим "сна"/"бодрствования" (это относится к ранее созданным, но не используемым в данный момент потокам). Этот поток может использоваться для подключения к сеансу серверного или клиентского коммуникационного потока. SQLBrm также направляет БД команду фиксации/отмены транзакции. DTC узнает статусы компонентов, и если в результате приходит сообщение об успехе/неудаче (см. выше), DTC координирует свои действия с SQLBrm, который фактически выполняет процедуры фиксации/отмены по отношению к базе данных SQLBase. Кроме того, SQLBrm заведует коммуникационными потоками между клиентом и сервером, используя их при необходимости и отключая в периоды, когда такая необходимость отпадает. При отключении SQLBase SQLBrm управляет остановкой коммуникационных потоков, отключая приемник информации ("Listener"), приостанавливая имеющиеся активные потоки и завершая все сеансы. Порядок выполнения распределенной транзакцииОбычно с SQLBase через SQLBrm связывается либо SQLBase OLE DB Provider, либо драйвер ODBC. Контакт со стороны OLE DB Provider или драйвера ODBC приводит к тому, что программа Listener создает сеанс связи и направляет администратору ресурсов запрос на подключение потоков от клиента и сервера к данному сеансу. Если существуют незанятые потоки, то администратор использует их. В противном случае для клиента и сервера создаются новые коммуникационные потоки. Клиенту направляется уведомление о принятии запроса, после чего тот посылает запрос на подключение. Этот запрос направляется через поток клиента в поток сервера и затем поступает в SQLBase. Ответ на запрос проделывает тот же путь в обратном направлении. Если клиент использует транзакцию MTS, SQLBrm получит инструкцию на включение этой транзакции. После этого SQLBrm устанавливает статус сеанса "активен". Любая операция с базой данных выполняется в той же последовательности, что и запрос на подключение. Когда клиент фиксирует транзакцию MTS, DTC сначала сообщает всем задействованным администраторам ресурсов о необходимости подготовки к фиксации, а затем осуществляет фиксацию. SQLBrm устанавливает метку фиксации сеанса и удаляет данные из журнала. При разрыве соединения с клиентом в SQLBase направляется соответствующее сообщение, и клиентский поток отключается от сеанса. После принятия SQLBase сообщения о прекращении соединения выполняется отключение серверного потока и удаление сеанса. Следует иметь в виду, что время выполнения транзакции MTS может превышать длительность нескольких подключений или выполнения других транзакций MTS, а также может являться этапом обработки одного-единственного подключения. В этом состоит отличие от обычного для SQLBase определения транзакции как события, происходящего в период от подключения до отключения. РезюмеВ представленных выше разделах мы дали представление о распределенной транзакции и компонентах, необходимых для ее выполнения с помощью Gupta SQLBase и SQLBrm. Кроме того, мы объяснили процесс записи информации, которая требуется SQLBrm и DTC для восстановления исходных данных на случай сбоя системы. Давайте теперь рассмотрим практическую сторону настройки среды и приведем пример использования языка Team Developer для создания приложений MTS в SQLBase 8.0 Установка приложения MTS Sample BankПриложение Sample Bank реализует сервисы, создающие инфраструктуру для поддержки выполнения программы в изолированной БД, создающие новые счета и удаляющие старые, открывающие и закрывающие счета, позволяет класть и снимать со счета денежные суммы, а также просматривать баланс. Это приложение позволяет проверить взаимодействие установленной программы MTS с Gupta SQLBase 8.0, а также обрести навыки распределения пакетов и администрирования. Компоненты программы Sample Bank написаны на языке Team Developer (исходный код прилагается). Создание компонентов (Team Developer)Компоненты COM+ можно создавать с помощью Team Developer. Для этого следует открыть MTS_TD_COM_with_OLEDB.app с помощью программы Team Developer 2.1. Выберите строку меню "Build Settings" и перейдите к закладке "Build Target". Затем назначьте имя MTS_TD.dll для DLL. Наконец, нажмите зависимую кнопку "MTS COM Server (DLL)", на закладке "COM Server" выберите опцию "Single Threaded Apartment" и убедитесь в том, что значение основной версии равно 1, а второстепенной - 0. Создайте COM. Создание клиентской программы (Team Developer)Пример клиентской программы, применяющей указанные выше компоненты, написан на языке Team Developer. Программа называется "MTS_TD_Client_with_OLEDB.app". Перейдя к строке меню "ActiveX Explorer", выберите COM под названием "MTS_TD 1.0 Type Library" и сгенерируйте APL для всех классов CoClasses и интерфейсов. Выполните компиляцию и сохраните APP. Создайте выполняемую программу "MTS_TD_Client_with_OLEDB.exe". Создание консоли MMCНажмите кнопку "Start", выберите строку "Run" и введите "MMC". Воспользуйтесь командой "Add/Remove Snap-In". Щелкните кнопку с надписью "Add". Выберите 3 интегрируемых приложения (Snap-In): Component Services, Services и SQLBase Services. Щелкните кнопку "Close", затем - кнопку "OK" и сохраните файл под именем MTS_TD. Установка COM+Порядок добавления пакетных компонентов и транзакций в программу Sample Bank:
Выполнение клиентской программы Bank
a) в ходе выполнения первой транзакции создаются таблицы базы данных фиктивного банка с временными записями; Чтобы установить атрибуты транзакции для компонентов, выполните следующие действия:
Требования к ПО
|