RMI (Remote Method Invocation)
RMI (Remote Method Invocation) este un API care oferă un mecanism pentru a crea aplicație distribuită în java. RMI permite unui obiect să invoce metode pe un obiect care rulează într-un alt JVM.
RMI asigură comunicarea la distanță între aplicații folosind două obiecte ciot și schelet.
înțelegerea ciot și schelet
RMI utilizează ciot și schelet obiect pentru comunicarea cu obiectul de la distanță.
un obiect la distanță este un obiect a cărui metodă poate fi invocată de la un alt JVM. Să înțelegem obiectele ciot și schelet:
ciot
ciot este un obiect, acționează ca o poartă pentru partea clientului. Toate cererile de ieșire sunt direcționate prin ea. Se află în partea clientului și reprezintă obiectul la distanță. Când apelantul invocă metoda pe obiectul ciot, face următoarele sarcini:
- se inițiază o conexiune cu mașină virtuală la distanță (JVM),
- se scrie și transmite (mareșali) parametrii la mașină virtuală la distanță (JVM),
- se așteaptă rezultatul
- se citește (unmarshals) valoarea returnată sau excepție, și
- în cele din urmă, returnează valoare pentru apelant.
schelet
scheletul este un obiect, acționează ca o poartă pentru obiectul din partea serverului. Toate cererile primite sunt direcționate prin ea. Când scheletul primește cererea de intrare, face următoarele sarcini:
- citește parametrul pentru metoda la distanță
- invocă metoda pe obiectul la distanță real, și
- scrie și transmite (mareșali) rezultatul apelantului.
în SDK-ul Java 2, a fost introdus un protocol stub care elimină nevoia de schelete.
înțelegerea cerințelor pentru aplicațiile distribuite
dacă orice aplicație îndeplinește aceste sarcini, acesta poate fi distribuit cerere.
.
- aplicația trebuie să localizeze metoda la distanță
- trebuie să furnizeze comunicarea cu obiectele la distanță și
- aplicația trebuie să încarce definițiile clasei pentru obiecte.
aplicația RMI are toate aceste caracteristici, deci se numește aplicația distribuită.
Java RMI exemplu
este dat 6 pași pentru a scrie programul RMI.
- creați interfața la distanță
- furnizați implementarea interfeței la distanță
- compilați clasa de implementare și creați obiectele ciot și schelet folosind instrumentul rmic
- porniți serviciul de registru prin instrumentul rmireregistry
- creați și porniți aplicația la distanță
- creați și porniți aplicația la distanță
exemplu RMI
în acest exemplu, am urmat toți cei 6 pași pentru a crea și rula aplicația RMI. Aplicația client are nevoie doar de două fișiere, interfață la distanță și aplicație client. În aplicația rmi, atât clientul, cât și serverul interacționează cu interfața la distanță. Aplicația client invocă metode pe obiectul proxy, RMI trimite cererea către JVM la distanță. Valoarea returnată este trimisă înapoi la obiectul proxy și apoi la aplicația client.
1) Creați interfața la distanță
pentru crearea interfeței la distanță, extindeți interfața la distanță și declarați RemoteException cu toate metodele interfeței la distanță. Aici, creăm o interfață la distanță care extinde interfața la distanță. Există o singură metodă numită add () și declară RemoteException.
2) asigură implementarea interfeței la distanță
oferă acum implementarea interfeței la distanță. Pentru asigurarea implementării interfeței la distanță, trebuie să
- fie să extindem clasa UnicastRemoteObject,
- sau să folosim metoda exportObject() a clasei UnicastRemoteObject
în cazul în care extindeți clasa UnicastRemoteObject, trebuie să definiți un constructor care declară RemoteException.
3) Creați obiectele ciot și schelet folosind instrumentul rmic.
următorul pas este de a crea obiecte ciot și schelet folosind compilatorul rmi. Instrumentul rmic invocă compilatorul RMI și creează obiecte ciot și schelet.
4) Porniți serviciul de registru prin instrumentul rmiregry
acum porniți serviciul de registry utilizând instrumentul rmiregry. Dacă nu specificați numărul portului, acesta utilizează un număr de port implicit. În acest exemplu, folosim numărul portului 5000.
5) Creați și rulați aplicația server
acum serviciile rmi trebuie să fie găzduite într-un proces server. Clasa de denumire oferă metode pentru a obține și stoca obiectul la distanță. Clasa de denumire oferă 5 metode.
java static publice.rmi.Căutare la distanță (java.lang.String) aruncă java.rmi.NotBoundException, java. net. MalformedURLException, java.rmi.RemoteException; | returnează Referința obiectului la distanță. |
public static void bind (java.lang.String, java.rmi.La distanță) aruncă java.rmi.AlreadyBoundException, java.net.MalformedURLException, java.rmi.RemoteException; | se leagă obiectul la distanță cu numele dat. |
public static void unbind (java.lang.String) aruncă java.rmi.RemoteException, java.rmi.NotBoundException, java. net.MalformedURLException; | distruge obiectul de la distanță, care este legat cu numele dat. |
public static void rebind (java.lang.String, java.rmi.La distanță) aruncă java.rmi.RemoteException, java. net.MalformedURLException; | se leagă obiectul la distanță la noul nume. |
java static publice.lang.Lista șirurilor (java.lang.String) aruncă java.rmi.RemoteException, java. net.MalformedURLException; | returnează o serie de nume ale obiectelor la distanță legate în registru. |
în acest exemplu, legăm obiectul la distanță cu numele sonoo.
6) Creați și rulați aplicația client
la client obținem obiectul ciot prin metoda lookup() a clasei de denumire și invocând metoda pe acest obiect. În acest exemplu, rulăm aplicațiile server și client, în aceeași mașină, așa că folosim localhost. Dacă doriți să accesați obiectul la distanță de la o altă mașină, schimbați localhost la numele gazdei (sau adresa IP) unde se află obiectul la distanță.
ieșire din acest exemplu RMI
exemplu semnificativ de aplicare RMI cu baza de date
ia în considerare un scenariu, există două aplicații care rulează în mașini diferite. Să spunem MachineA și MachineB, machineA este situat în Statele Unite și MachineB în India. MachineB doriți să obțineți lista tuturor clienților aplicației MachineA.
să dezvoltăm aplicația RMI urmând pașii.
1) creați tabelul
în primul rând, trebuie să creăm tabelul în baza de date. Aici, folosim baza de date Oracle10.
2) Creați clasa clientului și interfața la distanță
fișier: client.java
notă: clasa client trebuie să fie Serializabil.
Fișier: Bancă.java
3) Creați clasa care oferă implementarea interfeței la distanță
fișier: BankImpl.java
4) compilați instrumentul rmic de clasă și porniți serviciul de registru prin instrumentul rmireregistry
5) Creați și rulați fișierul Server
: MyServer.java
6) Creați și rulați clientul
fișier: MyClient.java