91. Rejestracja serwera RMI w katalogu serwerów. Aby umoliwić
Transkrypt
91. Rejestracja serwera RMI w katalogu serwerów. Aby umoliwić
91. Rejestracja serwera RMI w katalogu serwerów. Aby umożliwić klientom odnalezienie serwera, musi on się zarejestrować w serwisie RMI-Registry (usługa rejestru początkowego). W klasie (czy funkcji) implementującej serwer po utworzeniu obiektu zdalnego (w naszym przepadku ServerObject) rejestrujemy go w RMI-Registry za pomocą następującego kodu: java.rmi.Naming.rebind("rmi://host/Name", ServerObject) Stosuje się metodę rebind, ponieważ bind() zostało użyte automatycznie przez konstruktor klasy macierzystej UnicastRemoteObject (klasy podstawowej dla klas obiektów zdalnych). Ponieważ trudno jest zachować unikalność nazw w rejestrze (u nas jest to nazwa Name), nie powinno się więc korzystać z niego jako ogólnej metody odnajdywania obiektów na serwerze. Wykorzystanie usługi rejestru początkowego należy starać się ograniczać tylko do kilku obiektów. Obiekty te powinny umożliwiać odnalezienie innych obiektów serwera (przykładem może być omówiony za chwilę menedżer obiektów). 92. Scenariusz przydzielania referencji przez menedżera obiektów. Menedżer obiektów to obiekt zarządzający dostępem do puli serwerów (obiektów zdalnych). Pozwala na działanie wielu serwerów tej samej klasy na tym samym komputerze, zwraca klientom referencje do serwerów za pomocą mechanizmu RMI (menedżer serwerów definiuje nowy interfejs z metodą zwracającą klientowi referencję do jednego z zarządzanych obiektów). Schemat działania: 1. Na komputerze 1 działa katalog serwerów RMI oraz pewna maszyna wirtualna. W tej maszynie jest tworzony ( ) menedżer zawiadujący obiektami-serwerami. Menedżer może utworzyć początkową pulę serwerów (---). Następnie menedżer rejestruje siebie w katalogu serwerów ( ) i czeka na połączenia klientów (obiekty-serwery nie są rejestrowane). 2. Na komputerze 2 uruchamiana jest maszyna wirtualna, w której będzie działał klient. ). Następnie Z serwisu katalogowego uzyskuje on referencję do menedżera ( klient wywołuje zdalną metodę menedżera, który zwraca referencję do jednego z zarządzanych przez niego obiektów-serwerów (menedżer może wskazać już istniejący obiekt lub utworzyć nowy). 3. Maszyna wirtualna w komputerze 2 po otrzymaniu referencji do zdalnego obiektu, tworzy namiastkę i zwraca referencję do niej klientowi. Po tym klient jest już gotowy do wywoływania zdalnych metod serwera. 93. Własności interfejsu Remote i mechanizmu serializacji. Wszystkie interfejsy zdalnych obiektów muszą rozszerzać interfejs Remote (pakiet java.rmi.). Ponadto wszystkie metody tych interfejsów muszą także deklarować możliwość wyrzucenia wyjątku RemoteException. Powodem takiej deklaracji jest mniejsza niezawodność zdalnych wywołań metod – zawsze istnieje możliwość, że mogą one zawieść. W przypadku obiektów zdalnych mamy do czynienia z rozproszonym odśmiecaniem pamięci (distributed garbage collection) - obiekt implementujący Remote może być usunięty, gdy nie odnoszą się do niego referencje w maszynach lokalnej i zdalnych. W przypadku, gdy nasz obiekty nie implementuje interfejsu Remote do odległej maszyny jest przekazywana jego kopia. Obiekt taki (za wyjątkiem typów prostych) musi implementować interfejs java.io.Serializable. Jeśli nie satysfakcjonuje nas forma serializacji wygenerowana domyślnie, możemy przeciążyć dwie metody interfejsu Serializable – writeObject oraz readObject. 94. Zastosowanie mechanizmu JNI. Mechanizm Java Native Interface umożliwia wykorzystanie modułu napisanego w C/C++ lub asemblerze i opakowanie go w celu wykorzystania w aplikacji Java. W przypadku metod macierzystych język Java wymaga zastosowania słowa kluczowego native. Po zadeklarowaniu odpowiednich metod z modyfikatorem native uruchamiamy kompilator javah, który generuje pliki nagłówkowy z deklaracją w C. Sposób korzystania z JNI: • Dla programu w Javie: o implementacje wszystkich procedur native muszą być umieszczone w bibliotece dołączanej dynamicznie, o funkcje ładujące bibliotekę należy wykonać jawnie. • Dla procedury w języku C: o obiekty maszyny wirtualnej mogą być przez nią przemieszczane pod inny adres - w czasie odwołań do nich należy je czasowo unieruchomić za pomocą odpowiednich funkcji. 95. Schemat tworzenia aplikacji rozproszonej wykorzystującej RMI i JNI. Na rysunku chyba widać wszystko ☺. W ogóle to jest jakieś dziwne pytanie. Obiekt zdalny wywołuje jakąś metodę natywną i tyle. Pzdr. ☺