RMI (Remote Method Invocation)
RMI (Remote Method Invocation) jest API, które zapewnia mechanizm do tworzenia aplikacji rozproszonych w Javie. RMI pozwala obiektowi wywoływać metody na obiekcie uruchomionym w innym JVM.
RMI zapewnia zdalną komunikację między aplikacjami za pomocą dwóch obiektów stub i skeleton.
zrozumienie stub i szkieletu
RMI używa stub i obiektu szkieletu do komunikacji ze zdalnym obiektem.
obiekt zdalny to obiekt, którego metodę można wywołać z innego JVM. Zrozumiemy stub i Obiekty szkieletowe:
stub
stub jest obiektem, działa jako brama po stronie klienta. Wszystkie wychodzące żądania są kierowane przez niego. Znajduje się po stronie klienta i reprezentuje zdalny obiekt. Gdy wywołujący wywołuje metodę na obiekcie stub, wykonuje następujące zadania:
- inicjuje połączenie ze zdalną maszyną wirtualną (JVM),
- zapisuje i przesyła (marshals) parametry do zdalnej maszyny Wirtualnej (JVM),
- czeka na wynik
- odczytuje (unmarshals) wartość zwracaną lub wyjątek, a
- wreszcie, zwraca wartość do wywołującego.
szkielet
szkielet jest obiektem, działa jako brama dla obiektu po stronie serwera. Wszystkie przychodzące żądania są kierowane przez niego. Gdy szkielet otrzymuje przychodzące żądanie, wykonuje następujące zadania:
- odczytuje parametr dla zdalnej metody
- wywołuje metodę na rzeczywistym zdalnym obiekcie, a
- zapisuje i przesyła (marshals) wynik do wywołującego.
w SDK Java 2 wprowadzono protokół stub, który eliminuje potrzebę szkieletów.
zrozumienie wymagań dla aplikacji rozproszonych
jeśli jakakolwiek aplikacja wykonuje te zadania, może być aplikacją rozproszoną.
.
- aplikacja musi zlokalizować zdalną metodę
- aplikacja musi zapewnić komunikację z odległymi obiektami, a
- aplikacja musi załadować definicje klas dla obiektów.
aplikacja RMI ma wszystkie te funkcje, więc nazywa się aplikacją rozproszoną.
przykład Java RMI
podano 6 kroków do napisania programu RMI.
- Utwórz zdalny interfejs
- dostarcz implementację zdalnego interfejsu
- Skompiluj klasę implementacji i utwórz stub i szkielet obiektów za pomocą narzędzia rmic
- Uruchom usługę rejestru za pomocą narzędzia rmiregistry
- Utwórz i uruchom zdalną aplikację
- Utwórz i uruchom zdalną aplikację
- Utwórz i uruchom zdalną aplikację
RMI przykład
w tym przykładzie wykonaliśmy wszystkie 6 kroków, aby utworzyć i uruchomić aplikację RMI. Aplikacja kliencka potrzebuje tylko dwóch plików, zdalnego interfejsu i aplikacji klienckiej. W aplikacji rmi zarówno klient,jak i serwer współdziała ze zdalnym interfejsem. Aplikacja kliencka wywołuje metody na obiekcie proxy, RMI wysyła żądanie do zdalnego JVM. Zwracana wartość zostanie odesłana z powrotem do obiektu proxy, a następnie do aplikacji klienckiej.
1) Utwórz zdalny interfejs
aby utworzyć zdalny interfejs, rozszerz Zdalny interfejs i zadeklaruj wyjątek RemoteException wszystkimi metodami zdalnego interfejsu. Tutaj tworzymy zdalny interfejs, który rozszerza Zdalny interfejs. Istnieje tylko jedna metoda o nazwie add () I deklaruje RemoteException.
2) Zapewnij implementację zdalnego interfejsu
teraz zapewnij implementację zdalnego interfejsu. Aby zapewnić implementację zdalnego interfejsu, musimy
- albo rozszerzyć klasę UnicastRemoteObject,
- lub użyć metody exportObject() klasy UnicastRemoteObject
w przypadku rozszerzenia klasy UnicastRemoteObject, musisz zdefiniować konstruktor, który deklaruje RemoteException.
3) Utwórz obiekty wejściowe i szkieletowe za pomocą narzędzia rmic.
nastÄ ™ pnym krokiem jest tworzenie obiektĂłw skeleton i stub za pomocÄ … kompilatora rmi. Narzędzie rmic wywołuje kompilator RMI i tworzy obiekty stub i szkielet.
4) Uruchom usługę rejestru za pomocą narzędzia rmiregistry
Teraz uruchom usługę rejestru za pomocą narzędzia rmiregistry. Jeśli nie podasz numeru portu, zostanie użyty domyślny numer portu. W tym przykładzie używamy numeru portu 5000.
5) Utwórz i uruchom aplikację serwerową
teraz usługi rmi muszą być hostowane w procesie serwera. Klasa Naming udostępnia metody do pobierania i Przechowywania Zdalnego obiektu. Klasa nazewnictwa udostępnia 5 metod.
public static java.rmi.Remote lookup (java.lang.String) wyrzuca Javę.rmi.NotBoundException, java. net. MalformedURLException, java.rmi.RemoteException; | zwraca referencję obiektu zdalnego. |
public static void bind (java.lang.String, java.rmi.Remote) wyrzuca Javę.rmi.AlreadyBoundException, java.net.MalformedURLException, java.rmi.RemoteException; | wiąże zdalny obiekt o podanej nazwie. |
public static void unbind (java.lang.String) wyrzuca Javę.rmi.RemoteException, java.rmi.NotBoundException, java. net. MalformedURLException; | niszczy zdalny obiekt, który jest związany z podaną nazwą. |
public static void rebind (java.lang.String, java.rmi.Remote) wyrzuca Javę.rmi.RemoteException, java. net. MalformedURLException; | wiąże zdalny obiekt z nową nazwą. |
public static java.lang.Lista łańcuchów (java.lang.String) wyrzuca Javę.rmi.RemoteException, java. net. MalformedURLException; | zwraca tablicę nazw zdalnych obiektów powiązanych z rejestrem. |
w tym przykładzie wiążemy zdalny obiekt o nazwie sonoo.
6) wytworzenie i uruchomienie aplikacji klienckiej
u klienta otrzymujemy obiekt stub przy pomocy metody lookup () klasy Naming i wywołanie metody na tym obiekcie. W tym przykładzie uruchamiamy aplikacje serwerowe i klienckie na tym samym komputerze, więc używamy localhost. Jeśli chcesz uzyskać dostęp do obiektu zdalnego z innego komputera, zmień localhost na nazwę hosta (lub adres IP), w którym znajduje się obiekt zdalny.
wyjście tego przykładu RMI
znaczący przykład aplikacji RMI z bazą danych
rozważmy scenariusz, istnieją dwie aplikacje działające na różnych maszynach. Powiedzmy, że MachineA i MachineB, machineA znajduje się w Stanach Zjednoczonych i MachineB w Indiach. MachineB chcesz uzyskać listę wszystkich klientów aplikacji MachineA.
rozwijajmy aplikację RMI, postępując zgodnie z instrukcjami.
1) Utwórz tabelę
przede wszystkim musimy utworzyć tabelę w bazie danych. Tutaj używamy bazy danych Oracle10.
2) Utwórz klasę klienta i zdalny interfejs
plik: Klient.java
Uwaga: Klasa klienta musi być Serializowalna.
Plik: Bank.java
3) Utwórz klasę, która dostarcza implementację zdalnego interfejsu
plik: BankImpl.java
4) Skompiluj narzędzie klasy rmic i uruchom usługę rejestru przy pomocy narzędzia rmiregistry
5) Utwórz i uruchom serwer
plik: Merserver.java
6) utworzenie i uruchomienie pliku Klienta
: MyClient.java