logo

Ekstern metodeanrop i Java

Merk:
java.rmi-pakken : Remote Method Invocation (RMI) har blitt avviklet i Java 9 og nyere versjoner, til fordel for andre eksterne kommunikasjonsmekanismer som webtjenester eller Remote Procedure Calls (RPC).

Remote Method Invocation (RMI) er et API som lar et objekt påkalle en metode på et objekt som finnes i et annet adresserom, som kan være på samme maskin eller på en ekstern maskin. Gjennom RMI kan et objekt som kjører i en JVM tilstede på en datamaskin (klientsiden) påkalle metoder på et objekt som finnes i en annen JVM (serversiden). RMI oppretter et offentlig eksternt serverobjekt som muliggjør kommunikasjon på klient- og serversiden gjennom enkle metodekall på serverobjektet.



Stubbobjekt: Stubbobjektet på klientmaskinen bygger en informasjonsblokk og sender denne informasjonen til serveren.

Blokken består av

java int til dobbel
  • En identifikator for det eksterne objektet som skal brukes
  • Metodenavn som skal påberopes
  • Parametere til den eksterne JVM

Skjelettobjekt: Skjelettobjektet sender forespørselen fra stubbobjektet til det eksterne objektet. Den utfører følgende oppgaver



  • Den kaller den ønskede metoden på det virkelige objektet som er tilstede på serveren.
  • Den videresender parameterne mottatt fra stubbobjektet til metoden.

Arbeid av RMI

Kommunikasjonen mellom klient og server håndteres ved å bruke to mellomobjekter: Stub-objekt (på klientsiden) og Skeleton-objektet (på server-siden), som også kan avbildes fra undermediet som følger:

Dette er trinnene som skal følges sekvensielt for å implementere grensesnitt som definert nedenfor som følger:



  1. Definere et eksternt grensesnitt
  2. Implementering av det eksterne grensesnittet
  3. Opprette Stub- og Skeleton-objekter fra implementeringsklassen ved å bruke rmic (RMI-kompilator)
  4. Start rmiregistry
  5. Opprett og kjør serverapplikasjonsprogrammet
  6. Opprett og utfør klientapplikasjonsprogrammet.

Trinn 1: Definere det eksterne grensesnittet

Det første du må gjøre er å lage et grensesnitt som vil gi beskrivelsen av metodene som kan påberopes av eksterne klienter. Dette grensesnittet skal utvide det eksterne grensesnittet, og metodeprototypen i grensesnittet skal kaste RemoteException.

Eksempel:

Java

linux kommandoer som




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

>

>

Trinn 2: Implementering av det eksterne grensesnittet
Det neste trinnet er å implementere det eksterne grensesnittet. For å implementere det eksterne grensesnittet, bør klassen utvides til UnicastRemoteObject-klassen til java.rmi-pakken. Det må også opprettes en standardkonstruktør for å kaste java.rmi.RemoteException fra dens overordnede konstruktør i klassen.

Java




// 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;> >}> }>

>

>

struktur i datastruktur

Trinn 3: Lage Stub- og Skeleton-objekter fra implementeringsklassen ved å bruke rmic
rmic-verktøyet brukes til å starte rmi-kompilatoren som lager Stub- og Skeleton-objektene. Prototypen er rmic classname. For programmet ovenfor må følgende kommando utføres ved ledeteksten
rmic SearchQuery.
Trinn 4: Start rmiregistry
Start registertjenesten ved å gi følgende kommando ved ledeteksten start rmiregistry
Trinn 5: Opprett og kjør serverapplikasjonsprogrammet
Det neste trinnet er å lage serverapplikasjonsprogrammet og kjøre det på en egen ledetekst.

  • Serverprogrammet bruker createRegistry-metoden til LocateRegistry-klassen for å lage rmiregistry i server-JVM med portnummeret sendt som argument.
  • Rebind-metoden til Naming-klassen brukes til å binde det eksterne objektet til det nye navnet.

Java




// 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);> >}> >}> }>

javascript

>

>

Trinn 6: Opprett og kjør klientapplikasjonsprogrammet
Det siste trinnet er å lage klientapplikasjonsprogrammet og kjøre det på en egen ledetekst. Oppslagsmetoden til Naming-klassen brukes for å få referansen til Stub-objektet.

Java


ubuntu bygge nødvendigheter



// 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);> >}> >}> }>

>

>

Merk: Ovennevnte klient- og serverprogram kjøres på samme maskin, så localhost brukes. For å få tilgang til det eksterne objektet fra en annen maskin, må localhost erstattes med IP-adressen der det eksterne objektet er til stede.

lagre filene i henhold til klassenavnet som

Search.java, SearchQuery.java, SearchServer.java og ClientRequest.java
Viktige observasjoner:

  1. RMI er en ren java-løsning for Remote Procedure Calls (RPC) og brukes til å lage de distribuerte applikasjonene i java.
  2. Stub- og Skeleton-objekter brukes til kommunikasjon mellom klient- og serversiden.