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.