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:

  1. inicjuje połączenie ze zdalną maszyną wirtualną (JVM),
  2. zapisuje i przesyła (marshals) parametry do zdalnej maszyny Wirtualnej (JVM),
  3. czeka na wynik
  4. odczytuje (unmarshals) wartość zwracaną lub wyjątek, a
  5. 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:

  1. odczytuje parametr dla zdalnej metody
  2. wywołuje metodę na rzeczywistym zdalnym obiekcie, a
  3. zapisuje i przesyła (marshals) wynik do wywołującego.

w SDK Java 2 wprowadzono protokół stub, który eliminuje potrzebę szkieletów.stub i szkielet w RMI

zrozumienie wymagań dla aplikacji rozproszonych

jeśli jakakolwiek aplikacja wykonuje te zadania, może być aplikacją rozproszoną.

.

  1. aplikacja musi zlokalizować zdalną metodę
  2. aplikacja musi zapewnić komunikację z odległymi obiektami, a
  3. 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.

  1. Utwórz zdalny interfejs
  2. dostarcz implementację zdalnego interfejsu
  3. Skompiluj klasę implementacji i utwórz stub i szkielet obiektów za pomocą narzędzia rmic
  4. Uruchom usługę rejestru za pomocą narzędzia rmiregistry
  5. Utwórz i uruchom zdalną aplikację
  6. Utwórz i uruchom zdalną aplikację
  7. 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.

 RMI przykład

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

RMIRMI

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.

aplikacja RMI z bazą danych

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

 przykład RMI z bazą danych

5) Utwórz i uruchom serwer

plik: Merserver.javaprzykład zdalnego wywołania metody

6) utworzenie i uruchomienie pliku Klienta

: MyClient.java przykład RMI