logo

Віддалений виклик методів у Java

Примітка:
пакет java.rmi : Remote Method Invocation (RMI) застаріло в Java 9 і пізніших версіях на користь інших механізмів віддаленого зв’язку, таких як веб-сервіси або Remote Procedure Calls (RPC).

Remote Method Invocation (RMI) — це API, який дозволяє об’єкту викликати метод для об’єкта, який існує в іншому адресному просторі, який може бути на тій же машині або на віддаленій машині. За допомогою RMI об’єкт, що працює в JVM на комп’ютері (на стороні клієнта), може викликати методи об’єкта на іншій JVM (на стороні сервера). RMI створює загальнодоступний віддалений серверний об’єкт, який забезпечує зв’язок на стороні клієнта та сервера через прості виклики методів на серверному об’єкті.



Заглушка: Об’єкт-заглушка на клієнтській машині створює інформаційний блок і надсилає цю інформацію на сервер.

Блок складається з

веб-драйвер
  • Ідентифікатор віддаленого об'єкта, який буде використано
  • Назва методу, який потрібно викликати
  • Параметри віддаленої JVM

Скелетний об'єкт: Скелетний об’єкт передає запит від об’єкта-заглушки до віддаленого об’єкта. Він виконує наступні завдання



  • Він викликає потрібний метод для реального об’єкта, наявного на сервері.
  • Він передає параметри, отримані від об’єкта-заглушки, до методу.

Робота RMI

Зв’язок між клієнтом і сервером обробляється за допомогою двох проміжних об’єктів: об’єкта-заглушки (на стороні клієнта) і об’єкта-скелета (на стороні сервера), що також може бути зображено на носії нижче таким чином:

Нижче наведено наступні кроки, які необхідно виконати для впровадження інтерфейсу, як зазначено нижче:



  1. Визначення віддаленого інтерфейсу
  2. Впровадження віддаленого інтерфейсу
  3. Створення об'єктів Stub і Skeleton з класу реалізації за допомогою rmic (компілятор RMI)
  4. Запустіть rmiregistry
  5. Створіть і запустіть серверну прикладну програму
  6. Створення та виконання клієнтської прикладної програми.

Крок 1: Визначення віддаленого інтерфейсу

Перше, що потрібно зробити, це створити інтерфейс, який надаватиме опис методів, які можуть бути викликані віддаленими клієнтами. Цей інтерфейс має розширювати інтерфейс Remote, а прототип методу в цьому інтерфейсі має викликати RemoteException.

приклад:

Java




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

>

>

Крок 2: Реалізація віддаленого інтерфейсу
Наступним кроком є ​​впровадження віддаленого інтерфейсу. Щоб реалізувати віддалений інтерфейс, клас має поширюватися на клас UnicastRemoteObject пакета java.rmi. Крім того, необхідно створити конструктор за замовчуванням, щоб створити виняткову ситуацію java.rmi.RemoteException з його батьківського конструктора в класі.

заміна рядка java

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

>

>

Крок 3: Створення об’єктів Stub і Skeleton із класу реалізації за допомогою rmic
Інструмент rmic використовується для виклику компілятора rmi, який створює об’єкти Stub і Skeleton. Його прототипом є rmic classname. Для вищевказаної програми необхідно виконати наступну команду в командному рядку
rmic SearchQuery.
Крок 4. Запустіть rmiregistry
Запустіть службу реєстру, виконавши таку команду в командному рядку start rmiregistry
Крок 5: Створіть і запустіть прикладну програму сервера
Наступним кроком є ​​створення серверної прикладної програми та виконання її в окремому командному рядку.

  • Серверна програма використовує метод createRegistry класу LocateRegistry для створення rmiregistry в JVM сервера з номером порту, переданим як аргумент.
  • Метод rebind класу Naming використовується для прив’язки віддаленого об’єкта до нового імені.

Java


структури даних в 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);> >}> >}> }>

>

>

Крок 6: Створіть і запустіть клієнтську прикладну програму
Останнім кроком є ​​створення клієнтської прикладної програми та виконання її в окремому командному рядку. Метод пошуку класу Naming використовується для отримання посилання на об’єкт Stub.

Java




операційна система
// 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);> >}> >}> }>

>

>

Примітка: Вищезазначена клієнтська та серверна програми виконуються на одній машині, тому використовується локальний хост. Щоб отримати доступ до віддаленого об’єкта з іншої машини, localhost потрібно замінити на IP-адресу, на якій присутній віддалений об’єкт.

збережіть файли відповідно до імені класу як

Search.java, SearchQuery.java, SearchServer.java & ClientRequest.java
Важливі спостереження:

  1. RMI — це чисто Java-рішення для віддалених викликів процедур (RPC), яке використовується для створення розподілених програм на Java.
  2. Об’єкти Stub і Skeleton використовуються для зв’язку між клієнтом і стороною сервера.