[ Pobierz całość w formacie PDF ]
.poprzezzapis lub wymianę przez sieć).Oprogramowanie lokalne (klienta) może wywoływać8-33Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA Rozdział 8Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA metody obiektu zdalnego tak, jakby były to metody lokalne.Mechanizm ten jest więcbardzo wygodny dla programisty.Pojawia się jednak pewien problem.Otóż jeśliobiekt jest przekazywany (argument) lub zwracany przez metodę zwracana jest wrzeczywistości referencja realizowana jako wskaznik do pamięci organizowanej przezdaną maszynę wirtualną.Wymiana obiektów, a więc referencji pomiędzy dwomamaszynami wirtualnymi przysparza pewien problem: referencja obiektu A, np.12345w danej maszynie wirtualnej nie wskazuje tego samego obiektu na innej maszyniewirtualnej.Rozwiązanie tego problemu może być wykonane na dwa sposoby.Popierwsze można przekazać zdalną referencję obiektu wskazującą na pamięć zdalnejmaszyny wirtualnej.Oznacza to, że jeżeli klient przekazuje jako argument obiektzdalny (realizowany na maszynie zdalnej) to w rzeczywistości przekazuje jego zdalnąreferencję czyli zdalny obiekt nigdy nie opuszcza swojej maszyny wirtualnej.Jeżeli,co stanowi drugie rozwiązanie, natomiast klient przekazuje swój obiekt w wywołaniumetody zdalnej tworzy jego kopię, która jest przesyłana.W celu przesłania kopiiobiektu lokalnego konieczna jest jego konwersja do takiej formy zbioru bajtów, abybyła odtwarzalna po stronie serwera aplikacji.Konieczne jest zatem, dostępne wJavie, zastosowanie mechanizmu serializacji (klasy obiektów muszą implementowaćinterfejs Serializable).Prawie wszystkie obiekty mogą być w ten sposób podlegaćkonwersji, z wyjątkiem tych, które mają charakter lokalny (np.odnoszą się do plikówlokalnych).Przesyłanie obiektów poprzez ich kopie wykonywane jest również dla tychobiektów po stronie serwera aplikacji (zdalnej), które nie implementują interfejsuRemote, czyli są obiektami lokalnymi serwera lecz nie stanowią w świetle RMIobiektów zdalnych.Podsumowując, możliwe są następujące formy przekazywaniaargumentów i wyników działania metod:- przez wartość: w komunikacji dwustronnej poprzez wartość przekazywane sąproste typy danych jak: int, boolean, iitp),- przez referencję zdalną: w komunikacji klient -> serwer przekazywana jest zdalnareferencja zdalnego obiektu,- przez kopię: - czyli również przez wartość w komunikacji dwustronnej poprzezkopie przekazywane są obiekty inne niż zdalne (tzn.te dziedziczące po interfejsieRemote).8.4.2 Komunikacja w procesie zdalnego wykonywania metod.W celu analizy procesu komunikacji pomiędzy klientem a serwerem aplikacjiposłużmy się modelem zaprezentowanym na rysunku:Rysunek 8.1.Model warstwowy procesu komunikacji w RMIZ prezentowanego modelu widać, że logicznie oprogramowanie klienta pracuje tak,jakby było bezpośrednio powiązane z programami serwera.W rzeczywistości8-34Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA Rozdział 8Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA komunikacja jest bardziej złożona.Klient wywołując metody zdalne używaspecjalnego obiektu stub będącego odpowiednikiem, lokalnym reprezentantemobiektu zdalnego.Stub implementuje interfejs obiektu zdalnego dzięki czemuposiada pełen opis (sygnatury) metod tego obiektu.Obiekt stub stanowi więcnamiastkę (stub jest często tłumaczony przez słowo namiastka) obiektu zdalnego postronie lokalnej.Wywoływane przez klienta metody zdalne są bezpośrednioodnoszone do obiektu stub, a nie do obiektu zdalnego.Stub przekazuje dalejwywołanie do warstwy zdalnych referencji.Głównym zadaniem tej warstwy jestodniesienie lokalnych referencji obiektu stub do referencji obiektu zdalnego postronie serwera.Kolejnym krokiem jest przesłanie danych wywołania metody dowarstwy transportowej.Warstwa ta jest odpowiedzialna za przesyłanie danych przezsieć i realizuje: ustalanie połączeń, śledzenie obiektów zdalnych, zarządzaniepołączeniem, itp.Po stronie serwera warstwa transportowa realizuje nasłuch danychprzenoszących żądanie wykonania metody zdalnej.Po uzyskaniu referencji obiektuzdalnego, będącego teraz obiektem lokalnym serwera dane przekazywane są dokolejnej warstwy o nazwie skeleton.Skeleton (namiastka) jest odpowiednikiem stuba po stronie klienta.Warstwa ta odpowiada za przypisanie do wywoływanych metodprzez stub ich implementacji realizowanych w oprogramowaniu serwera.Powykonaniu zadania przez serwer ewentualne wyniki mogą być zwrotnietransportowane do klienta (jako: wartości, kopie obiektów lub obiekty zdalne)
[ Pobierz całość w formacie PDF ]