logo

Vzdálené vyvolání metody v Javě

Poznámka:
balíček java.rmi : Vzdálené vyvolání metody (RMI) bylo v Javě 9 a novějších verzích zastaralé ve prospěch jiných mechanismů vzdálené komunikace, jako jsou webové služby nebo vzdálené volání procedur (RPC).

Vzdálené vyvolání metody (RMI) je rozhraní API, které umožňuje objektu vyvolat metodu na objektu, který existuje v jiném adresovém prostoru, který může být na stejném počítači nebo na vzdáleném počítači. Prostřednictvím RMI může objekt spuštěný v JVM přítomném na počítači (na straně klienta) vyvolat metody na objektu přítomném v jiném JVM (na straně serveru). RMI vytvoří objekt veřejného vzdáleného serveru, který umožňuje komunikaci na straně klienta a serveru prostřednictvím jednoduchých volání metod na objekt serveru.



Stub Object: Objekt se zakázaným inzerováním na klientském počítači vytvoří informační blok a odešle tyto informace na server.

Blok se skládá z

  • Identifikátor vzdáleného objektu, který se má použít
  • Název metody, která má být vyvolána
  • Parametry vzdáleného JVM

Objekt kostry: Objekt kostry předá požadavek z objektu se zakázaným inzerováním vzdálenému objektu. Provádí následující úkoly



  • Volá požadovanou metodu na skutečném objektu přítomném na serveru.
  • Předává parametry přijaté z objektu se zakázaným inzerováním metodě.

Práce RMI

Komunikace mezi klientem a serverem je řešena pomocí dvou mezilehlých objektů: objektu Stub (na straně klienta) a objektu Skeleton (na straně serveru), jak lze také znázornit ze spodního média následovně:

Toto jsou kroky, které je třeba dodržet postupně při implementaci rozhraní, jak je definováno níže takto:



  1. Definování vzdáleného rozhraní
  2. Implementace vzdáleného rozhraní
  3. Vytváření objektů Stub a Skeleton z implementační třídy pomocí rmic (kompilátor RMI)
  4. Spusťte rmiregistr
  5. Vytvořte a spusťte aplikační program serveru
  6. Vytvořte a spusťte klientský aplikační program.

Krok 1: Definování vzdáleného rozhraní

První věc, kterou musíte udělat, je vytvořit rozhraní, které bude poskytovat popis metod, které mohou být vyvolány vzdálenými klienty. Toto rozhraní by mělo rozšířit vzdálené rozhraní a prototyp metody v rozhraní by měl vyvolat RemoteException.

Příklad:

Jáva




// Creating a Search interface> import> java.rmi.*;> public> interface> Search>extends> Remote> {> >// Declaring the method prototype> >public> String query(String search)>throws> RemoteException;> }>

>

>

Krok 2: Implementace vzdáleného rozhraní
Dalším krokem je implementace vzdáleného rozhraní. Aby bylo možné implementovat vzdálené rozhraní, měla by se třída rozšířit na třídu UnicastRemoteObject balíčku java.rmi. Také je třeba vytvořit výchozí konstruktor, který vyvolá výjimku java.rmi.RemoteException ze svého nadřazeného konstruktoru ve třídě.

Jáva




// Java program to implement the Search interface> import> java.rmi.*;> import> java.rmi.server.*;> public> class> SearchQuery>extends> UnicastRemoteObject> >implements> Search> {> >// Default constructor to throw RemoteException> >// from its parent constructor> >SearchQuery()>throws> RemoteException> >{> >super>();> >}> >// Implementation of the query interface> >public> String query(String search)> >throws> RemoteException> >{> >String result;> >if> (search.equals(>'Reflection in Java'>))> >result =>'Found'>;> >else> >result =>'Not Found'>;> >return> result;> >}> }>

>

>

Krok 3: Vytvoření objektů Stub a Skeleton z implementační třídy pomocí rmic
Nástroj rmic se používá k vyvolání kompilátoru rmi, který vytvoří objekty Stub a Skeleton. Jeho prototyp je rmic classname. Pro výše uvedený program je třeba na příkazovém řádku provést následující příkaz
rmic vyhledávací dotaz.
Krok 4: Spusťte rmiregistry
Spusťte službu registru zadáním následujícího příkazu na příkazovém řádku start rmiregistry
Krok 5: Vytvořte a spusťte aplikační program serveru
Dalším krokem je vytvoření aplikačního programu serveru a jeho spuštění na samostatném příkazovém řádku.

  • Serverový program používá metodu createRegistry třídy LocateRegistry k vytvoření rmiregistry v rámci JVM serveru s číslem portu předaným jako argument.
  • Metoda rebind třídy Naming se používá k navázání vzdáleného objektu na nový název.

Jáva




// Java program for server application> import> java.rmi.*;> import> java.rmi.registry.*;> public> class> SearchServer> {> >public> static> void> main(String args[])> >{> >try> >{> >// Create an object of the interface> >// implementation class> >Search obj =>new> SearchQuery();> >// rmiregistry within the server JVM with> >// port number 1900> >LocateRegistry.createRegistry(>1900>);> >// Binds the remote object by the name> >// geeksforgeeks> >Naming.rebind(>' rmi://localhost:1900 '>+> >'/geeksforgeeks'>,obj);> >}> >catch>(Exception ae)> >{> >System.out.println(ae);> >}> >}> }>

>

>

Krok 6: Vytvořte a spusťte klientský aplikační program
Posledním krokem je vytvoření klientského aplikačního programu a jeho spuštění na samostatném příkazovém řádku. Metoda vyhledávání třídy Naming se používá k získání odkazu na objekt Stub.

Jáva




// Java program for client application> import> java.rmi.*;> public> class> ClientRequest> {> >public> static> void> main(String args[])> >{> >String answer,value=>'Reflection in Java'>;> >try> >{> >// lookup method to find reference of remote object> >Search access => >(Search)Naming.lookup(>' rmi://localhost:1900 '>+> >'/geeksforgeeks'>);> >answer = access.query(value);> >System.out.println(>'Article on '> + value +> > + answer+>' at techcodeview.com'>);> >}> >catch>(Exception ae)> >{> >System.out.println(ae);> >}> >}> }>

připojovací řetězec java
>

>

Poznámka: Výše uvedený klientský a serverový program se spouští na stejném počítači, takže se používá localhost. Aby bylo možné přistupovat ke vzdálenému objektu z jiného počítače, musí být localhost nahrazen IP adresou, kde se vzdálený objekt nachází.

uložte soubory podle názvu třídy jako

Search.java, SearchQuery.java, SearchServer.java & ClientRequest.java
Důležité postřehy:

  1. RMI je čistě java řešení pro vzdálené volání procedur (RPC) a používá se k vytváření distribuovaných aplikací v jazyce Java.
  2. Objekty Stub a Skeleton se používají pro komunikaci mezi klientem a serverem.