Транзакції SQLBase 8.0 і COM +

Оглядові відомості


У даному матеріалі обговорюється 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 підтримує автоматичне керування транзакціями, організацію зв'язкового пулу звернень до баз даних, ізоляцію процесів, автоматичне приміщення потоків в пул, автоматизацію управління примірниками об'єктів, спільне використання ресурсів, систему безпеки, засновану на принципі ролей, моніторинг транзакцій в рамках розподіленого додатка і т. д.


Ці сервіси необхідні для масштабування компонентів, розташованих на сервері, і підтримки значного числа одночасних клієнтських запитів. Всі сервіси автоматизовані, і розробникам додатків не потрібно писати код спеціально для них.


Виходячи з цього, програмісти можуть створювати такі компоненти для розміщення на сервері, які будуть діяти так, ніби одночасно до сервера підключається тільки один клієнт.


Архітектура MTS


MTS – Це псевдопроцесс 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, що визначають поодинокі та розподілені транзакції.


Властивості ACID

ACID – це акронім, який служить для опису 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)


Якщо кожен з опитаних компонентів повідомить про успіх операції, диспетчер фіксує новий статус для кожного компонента і для всієї транзакції в цілому.

Фаза 2
(Сценарій 2)


Якщо один або кілька беруть участь в транзакції компонентів повідомляє про невдачу операції, диспетчер транзакцій скасовує всю транзакцію, що може спричинити за собою скасування змін, що відносяться до вмісту баз даних.


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:



  1. У MMC скористайтеся шляхом по меню "Component ServicesComputerMy ComputerCom + Applications".
  2. Клацніть правою кнопкою миші, а потім виберіть "Add -> New Application".
  3. На першій сторінці майстра встановити програму СОМ клацніть кнопку "Next".
  4. Натисніть кнопку "Create an empty Application". Як ім'я програми введіть "TD Bank Demo". Задайте в якості типу додатки "Server application". Натисніть кнопку "Next".
  5. Виберіть опцію "Interactive user" на сторінці "Set Application Identity". Натисніть кнопку "Finish".
  6. Тепер відкрийте "Bank Demo". У цьому вузлі знаходяться компоненти і ролі.
  7. Клацніть "Components". Потім клацніть "Components" правою кнопкою миші. Виберіть послідовність команд "New -> Component". У вікні майстра "COM Component Install Wizard" клацніть кнопку "Next". Виберіть команду "Install new component".
  8. Вкажіть повний шлях до DLL (створений раніше для компонента "MTS_TD.DLL". Натисніть кнопку "Next".

Виконання клієнтської програми Bank



  1. Запустіть координатор розподілених транзакцій Microsoft Distributed Transaction Coordinator (MS DTC).
  2. Запустіть SQLBase і SQLBrm.
  3. Запустіть виконуваний файл "MTS_TD_Client_with_OLEDB.exe".
  4. Якщо в базі даних ISLAND присутня таблиця "Account", натисніть кнопку "Remove Infrastructure".
  5. Клацніть кнопку "Create Infrastructure". Це призведе до створення таблиці "Account" і відкриттю в ній двох фіктивних рахунків.
  6. Натисніть кнопку "New Account". При цьому буде створено рахунок, номер якого буде виведений у відповідному полі.
  7. Натисніть кнопку "Open Account". При цьому на екрані відобразиться баланс на рахунку. Ця ж кнопка служить для активації / дезактивації відносяться до рахунку кнопок.
  8. Введіть значення в поля "Deposit" і "Withdrawal".
  9. Клацніть кнопку "Deposit". Після цього на екран буде виведено повідомлення про внесення суми на рахунок, і зміниться значення балансу.
  10. Натисніть кнопку "Withdrawal". Після цього на екран буде виведено повідомлення про зняття суми з рахунку, і зміниться значення балансу. Примітка: при спробі зняти з рахунку суму, що перевищує залишок, на екран буде виведено повідомлення про неможливість виконання подібної операції.
  11. Після закінчення роботи з рахунком клацніть кнопку "Close Account".
  12. Зверніть увагу на вікна DTC. Ви помітите оновлення вікон використання компонентів і статистичних відомостей про транзакції.
  13. Поекспериментуйте з клієнтом банку і спостерігайте за зміною цих відомостей при виконанні різних типів транзакцій, а також використанні різних серверів і ітерацій. Виконання першої транзакції займає більше часу, ніж наступних, оскільки:

a) у ході виконання першої транзакції створюються таблиці бази даних фіктивного банку з тимчасовими записами;
б) запуск процесу звернення до сервера вимагає залучення системних ресурсів;
в) підключення до бази даних також є ресурсномісткою операцією.


Щоб встановити атрибути транзакції для компонентів, виконайте наступні дії:



  1. В COM "MTS_TD.MTS_QueryBalance" виберіть для транзакції опцію "Supported";
  2. В COM "MTS_TD.MTS_TableDataOperations" задайте тип транзакції ("Required");
  3. У СОМ "MTS_TD.MTS_TableOperations" задайте тип транзакції ("Requires New");
  4. У СОМ "MTS_TD.MTS_UpdateBalance" задайте тип транзакції ("Required").

Вимоги до ПЗ


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*