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. ☺