RMI reprezintă invocarea metodei la distanță. Este un mecanism care permite unui obiect care locuiește într-un sistem (JVM) să acceseze/invoce un obiect care rulează pe un alt JVM.
RMI este utilizat pentru a construi aplicații distribuite; oferă comunicare la distanță între programele Java. Acesta este furnizat în pachetul java.rmi.
arhitectura unei aplicații RMI
într-o aplicație RMI, scriem două programe, un program server (se află pe server) și un program client (se află pe client).
-
în interiorul programului server, se creează un obiect la distanță și se pune la dispoziția clientului (folosind registrul) referința acelui obiect.
-
programul client solicită obiectele la distanță de pe server și încearcă să invoce metodele sale.
următoarea diagramă prezintă arhitectura unei aplicații RMI.
să discutăm acum componentele acestei arhitecturi.
-
strat de Transport-acest strat conectează clientul și serverul. Gestionează conexiunea existentă și stabilește, de asemenea, conexiuni noi.
-
ciot − un ciot este o reprezentare (proxy) a obiectului la distanță la client. Se află în sistemul client; acționează ca o poartă de acces pentru programul client.
-
schelet-acesta este obiectul care se află pe partea de server. stub comunică cu acest schelet pentru a transmite cererea obiectului la distanță.
-
RRL (Remote Reference Layer) – este stratul care gestionează referințele făcute de client la obiectul de la distanță.
lucrul unei aplicații RMI
următoarele puncte rezumă modul în care funcționează o aplicație RMI−
-
când clientul face un apel către obiectul la distanță, acesta este primit de ciot care în cele din urmă transmite această solicitare către RRL.
-
când RRL-ul din partea clientului primește cererea, invocă o metodă numită invoke () a obiectului remoteRef. Acesta transmite cererea către RRL pe partea serverului.
-
RRL de pe partea serverului transmite cererea către schelet (proxy pe server) care invocă în cele din urmă obiectul necesar pe server.
-
rezultatul este trecut tot drumul înapoi la client.
Marshalling și Unmarshalling
ori de câte ori un client invocă o metodă care acceptă parametrii pe un obiect la distanță, parametrii sunt grupate într-un mesaj înainte de a fi trimise prin rețea. Acești parametri pot fi de tip primitiv sau obiecte. În cazul tipului primitiv, parametrii sunt reuniți și un antet este atașat la acesta. În cazul în care parametrii sunt obiecte, atunci acestea sunt serializate. Acest proces este cunoscut sub numele de triaj.
pe partea de server, parametrii împachetați sunt separați și apoi este invocată metoda necesară. Acest proces este cunoscut sub numele de unmarshalling.
Registrul RMI
Registrul RMI este un spațiu de nume pe care sunt plasate toate obiectele serverului. De fiecare dată când serverul creează un obiect, acesta înregistrează acest obiect cu RMIregistry (folosind metode bind() sau reBind ()). Acestea sunt înregistrate folosind un nume unic cunoscut sub numele de bind name.
pentru a invoca un obiect la distanță, clientul are nevoie de o referință a acelui obiect. În acel moment, clientul preia obiectul din registru folosind numele său bind (folosind lookup() metoda).
următoarea ilustrație explică întregul proces −
obiectivele RMI
următoarele sunt obiectivele RMI−
- pentru a minimiza complexitatea aplicației.
- pentru a păstra siguranța tipului.
- colectarea gunoiului distribuit.
- minimizați diferența dintre lucrul cu obiecte locale și la distanță.