Проектування триланкової розподіленої інформаційної системи для роботи з БД із використанням технології
DataSnap
(MIDAS)
-
Мета
: отримання практичних навичок проектування розподіленої інформаційної системи із використанням технології MIDAS
.
-
Завдання
:
Створити оригінальну (!)
розподілену триланкову інформаційну системуна основі технології MIDAS
. Сервер прикладень
повинен інкапсулювати та експортувати деякий набір даних з абиякої таблиці БД. Прикладення-клієнт
повинен підключатися до сервера прикладень та відображувати отримані від сервера дані у вигляді мережі.
Методика створення сервера прикладень за технологією MIDAS
Сервер прикладень
інкапсулює велику частину бізнес-логіки розподіленого прикладення і забезпечує доступ клієнтів до БД. MIDAS-сервери прикладень повинні підтримувати деякий набір SQL-запитів для змін в БД і надсилати їх серверу БД за командою клієнтського прикладення.
Проектуємий тут сервер прикладень використовується для генерації запитів до БД через механізм BDE
.
Спочатку створимо головну форму прикладення, основне призначення якої - служити індикатором запущеного сервера (мал. 2.1
).
Малюнок 2.1
Форму можна розташувати де-небудь у кутку екрану, а її властивість FormStyle
встановити рівною fsStayOnTop
, щоб не втратити її вікно серед інших відкритих вікон.
Основною частиною сервера прикладень
є віддалений модуль даних
. Він є платформою для розташування невізуальних компонентів доступу до даних і компонентів-провайдерів. Розташовані на ньому компоненти з'єднань, транзакцій і компоненти, що інкапсулюють набори даних, забезпечують триланкове прикладення зв'язком із сервером БД
. Це можуть бути набори компонентів для технологій BDE
, ADO
, InterBase Express
, dbExpress
та ін. Віддалений модуль даних
реалізує основні функції сервера прикладень
на основі надання клієнтам інтерфейсу IAppServer
(або нащадка цього інтерфейсу). Для цього віддалений модуль даних
повинен містити компонент-провайдер DataSetProvider
, який передає пакети даних клієнтському прикладенню, а точніше компонентам ClientDataSet
, а також забезпечує доступ до методів інтерфейсу IAppServer
.
Для створення віддаленого модуля даних
треба виконати команду File | New | Other
і зі сторінки Multitier
репозитарія об'єктів обрати піктограму Remote DataModule
(мал.
2.2
)
.
Малюнок 2.2
У діалозі, що з'явився, слід задати ім'я компонентного класу сервера (SampleMIDASServer
) і, при необхідності, встановити прапорець Generate Events support code
(мал. 2.3
).
Малюнок 2.3
На одержаній порожній формі розташуйте компоненти (мал. 2.4
):
· Session
– для забезпечення сеансів зв'язку з БД;
· Table
(тут TableCustomer
), встановивши необхідні значення властивостей: DatabaseName
(тут BCDEMOS
), Session
(тут Session1_1
) і TableName
(тут customer.db
). Властивість Active
також слід встановити рівною true
(або встановити її значення динамічно при створенні модуля даних). Інакше компонент не міститиме ніяких даних, і не зможе надавати їх клієнтському прикладенню;
· DataSetProvider
і зв'яжіть його властивість DataSet
з TableCustomer
. Якщо цього не зробити, клієнтське прикладення не матиме доступу до джерела даних.
Малюнок 2.4
Після цього треба побудувати сервер прикладень
і виконати команду Run | Install COM+ Objects.
для реєстрації сервера механізмом DCOM
(мал. 2.5
).
Малюнок 2.5
Зареєстрований таким чином сервер повинен з'явитися у дереві Службы компонентов
, яке можна оглянути командою Пуск | Панель управления | Администрирование | Службы компонентов
(мал. 2.6
).
Малюнок
2
.6
І, нарешті, MIDAS-сервер
треба запустити на виконання. Тепер MIDAS-сервер
зареєстрований у реєстрі Windows як ActiveX-сервер
(т.н. об'єкт Автоматизації
).
За допомогою його контекстного меню командою Свойства
можна дізнатися ім'я і код прикладення для подальшого використання у прикладенні-клієнті (мал. 2.7
).
Малюнок 2.7
Методика створення клієнтського прикладення
Віддалене клієнтське прикладення повинне забезпечити з'єднання з сервером прикладень. Для цього можна використовувати компоненти з'єднань DataSnap
:
(використовує DCOM
), SocketСonnection
(використовує «кубла
» Windows
), WebConnection
(використовує http
). Компоненти з'єднання DataSnap
надають інтерфейс IAppServer
, використовуваний компонентами-провайдерами на боці сервера і компонентами ClientDataSet
на боці клієнта для передачі пакетів даних. Для роботи з наборами даних використовується компонент ClientDataSet
, що працює у режимі кешування
даних
. Для представлення даних і створення призначеного для користувача інтерфейсу в клієнтському програмному забезпеченні застосовуються стандартні компоненти зі сторінки Data Controls
палітри компонентів.
Створення клієнтського прикладення починається зі створення звичайного прикладення, на якому слід розташувати компоненти (мал.
2
.
8
):
Малюнок
2
.
8
· кнопки Установить/разорвать связь с сервером, Загрузить, Применить, Сохранить
;
· компонент DCOMConnection
для встановлення зв'язку з віддаленим сервером, властивості якого слід встановити так:
·ServerGUID
: {314929B6-CFC8-493D-874F-FC1CBBE6B802
}чи ж ServerName
(при заповненні одного з цих двох параметрів інший параметр зчитується з реєстру Windows і заповнюється автоматично); перевірити правильність DCOM-з’єднання
можна встановленням властивості Connectеd
в значення true
. При цьому повинен автоматично запуститися MIDAS-сервер
.
· джерело даних ClientDataSet
, властивості якого слід встановити так:
·RemoteServer
у значення DCOMConnection1
;
·ProviderName
у значення DataSetProvider1
(обрати зі списку);
· компонент DataSource
і пов'язати його з джерелом даних ClientDataSet1
;
· компонент DbGrid
і зв'язати його з компонентом DataSource
для відображення даних таблиці БД, одержаних від сервера.
Тепер тільки залишилося написати реакції на події від кнопок форми:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "ClientMainForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ConnectClick(TObject *Sender)
{
if (ClientDataSet1->Active) // close and disconnect
{
ClientDataSet1->Close();
DCOMConnection1->Close();
}
else // open (will automatically connect)
{
//DCOMConnection1->Open();
ClientDataSet1->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ApplyClick(TObject *Sender)
{
ClientDataSet1->ApplyUpdates(0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SaveClick(TObject *Sender)
{
ClientDataSet1->SaveToFile("customer.cds", dfBinary);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::LoadClick(TObject *Sender)
{
ClientDataSet1->LoadFromFile("customer.cds");
}
Клієнтське прикладення у триланковій моделі повинне володіти лише мінімально необхідним набором функцій, делегуючи більшість операцій з обробки даних серверу прикладень
. Все! Прикладення готове до запуску.
?Контрольні запитання:
1.
Опишіть процес спілкування сервера прикладення з клієнтом за технологією MIDAS
.
2.
З якою метою у прикладенні використані компоненти DCOMConnection
,
ClientDataSet
?
3.
Яку роль виконує Remote Data Module
?.
4.
Дайте вичерпні пояснення до розробленого вами прикладення.