Baza danych

Transkrypt

Baza danych
Serwery Statefull i Stateless
Wszystkie serwery aplikacji są określone jako stateless podczas projektowania. Te
aplikacje nie przetrzymują stałego połączenia z klientem. Wysyłają one pakiety
danych na zapytanie klienta bądź przetwarzają pakiety danych delta przesłane od
klienta i generują odpowiednie pakiety danych typu terror log. Klient odnosi się do
referencji interfejsu serwera tylko wtedy, gdy jest to potrzebne. Po stronie serwera
nie są przechowywane żadne informacje o kliencie. Kiedy klient otrzymał od serwera
potrzebne informacje interfejs do serwera zostaje zwolniony, klient nie wywołuje już
żadnej funkcji. Wszystkie zmiany na zbiorze danych są przechowywane w pamięci
cache klienta, dlatego też klient nie musi być połączony z na stałe z bazą danych.
Gdy klient potrzebuje więcej danych z serwera, łączy się z nim ponownie i wywołuje
jego funkcję, np. GetDepartments. Jeśli zaistniała potrzeba by wysłać
zmodyfikowane lub nowe dane bo bazy, by przechować ich stan, nowe połączenie
jest nawiązywane i wywoływana jest odpowiednia metoda. W naszym przykładzie
będzie to ApplyDepartmentUpdates.
Obiekty serwerów typu Stateless umożliwiają wysoką skalowalność w odniesieniu do
wielu równocześnie obsługiwanych użytkowników. Jeśli 1000 aplikacji klienckich
używa ten sam obiekt serwera, tylko 100 z nich może przechowywać referencje do
interfejsu serwera w tym samym czasie. Inne mogą się zając przetwarzaniem
danych. Kiedy jeden klient skończy obsługiwać zdalną metodę, zwalnia połączenie z
serwerem, jednocześnie daje innym aplikacją klienta dostęp do zasobów serwera.
Serwery Statefull przechowują informacje o stanie klienta. Kiedy aplikacja klienta
pobiera dane z serwera w paczkach, serwer musi pamiętać co przesłał ostatnio, by
mógł przesłać poprawnie następną paczkę, gdy klient będzie ją potrzebował. W tym
przypadku, gdy mamy 1000 klientów, aplikacja serwera musi zaalokować zasoby
systemowe dla wszystkich 1000. Mogą się wyczerpać zasoby pamięci serwera.
Za pomocą MIDAS-a można w różny sposób stworzyć komponenty serwerowi typu
statefull. Wiele prezentacji pokazujących wsparcie dla MIDAS-a jest oparte na
serwerach statefull, ponieważ można stworzyć dostęp do serwera danych MIDAS
przez proste przeciągnięcie i upuszczenie komponentu bez pisania ani jednej linii
kodu. A to robi wrażenie.
Następujące kroki są niezbędne by stworzyć serwer MIDAS typu statefull.
1. Wybierz File | New Application.
2. Wybierz File | New… | Multi Tier | Remote Data Module. W dialogu New
Remote Data Module wpisz “HR” (skrót od Human Resources) w polu edycyjnym
o nazwie Class Name i przyciśnij OK.
3. Wybierz File | Save all i wybierz domyślne nazwy dla Unit1 (Form1), Unit2
(DataModule2) i projektu: StatefullServer.
4. Umieść komponent TTable na HR remote data module i ustaw jego własność
Database
na
‘DBDEMOS’,
a
TableName
na
‘employee.db’.
5. Upuść komponent Tprovider na HR i ustaw jego własność DataSet na Table1.
Zmień nazwę komponentu TProvider na Employees
6. Kliknij prawym przyciskiem na Employees i wybierz Export Employees from data
module.
Własność Employee: IProvider zostanie dodana do interfejsu IHR w bibliotece typów
serwera.
Delphi stworzył również implementacje metody Get_Employees w unicie Unit2 (HR).
7. To już koniec tworzenia serwera. Uruchom aplikacje jeszcze raz by zarejestrować
nowy komponent COM: StatefullServer.HR.
Stworzenie aplikacji klienta nie jest trudne.
1. Wybierz File | New Application.
2. Wybierz File | New… | Data Module. Zapisz wszystkie pliki z domyślnymi
nazwami.
3. Umieść połączenie TDCOMConnection z zakładki MIDAS palety komponentów
na DataModule2.
4. Kliknij podwójnie na liście rozwijanej po prawej stronie właściwości ServerName w
inspektorze obiektów i wybierz nazwę obiektu serwera, tak jak na poniższym
obrazku.
5. Ustaw własciwość DCOMConnection1.Connected na True. Biblioteka run-time
DCOM wczyta aplikacje serwera, ponieważ komponent DCOMConnection1
będzie próbował nawiązać stałe połączenie z komponentem serwera.
6. Upuść komponent TclientDataSet na DataModule, ustaw jego właściwość
RemoteServer na DCOMConnection1i wybierz nazwę prowidera poprzez
właściwość ProviderName. Mamy do wybory tylko jedną dostępną opcje:
Employees. DCOMConnection1 pobiera z HR listę wszystkich właściwości typu
IProvider i wyświetla je dla nas. IProvider jest interfejsem COM, stworzonym
specjalnie dla komponentu TProvider MIDAS-a by umożliwić zdalną jego
modyfikację.
Wywołanie metody z tego interfejsu można połączyć z korzystaniem z komponentu
TProvider, który może istnieć w aplikacji serwera. Gdy zajrzymy do pomocy Delphi,
możemy stwierdzić, że wszystkie metody interfejsu Iprovider mają podobne nazwy do
metod komponentu TProvider.
Komponent TClientDataSet wie jak użyć interfejsu
IProvider, gdy ma do niego referencje. Po prostu
tworzymy tą referencje. Zbiór danych klienta
pobierze dane z zdalnego Sewera gdy ustawimy
jego właściwość Active na True. Można też określić
przepustowość używając właściwości PacketRecords.
7. Umieść komponent TDataSource na DataModule2 i ustaw jego własność DataSet
na ClientDataSet1
8. Upuść TDBGrid na Form1 i wpisz DataModule2.DataSource1 w własności
DataSource
9. Ustaw właściwość ClientDataSet1.Active na True, wtedy zobaczysz dane z
serwera podczas tworzenia aplikacji.
Ogólnie rzecz biorąc aplikacje serwera typu statefull nie są stosowane w przypadku,
gdy przewidujemy dużą liczbę użytkowników. Jeśli to nie stoi na przeszkodzie można
zrobić dobre rozwiązanie wielowątkowe, które stworzymy w krótkim czasie,
używające wsparcia serwera statefull.

Podobne dokumenty