Учебники

Приложение Java RMI

Чтобы написать Java-приложение RMI, вам необходимо выполнить следующие шаги:

  • Определите удаленный интерфейс
  • Разработать класс реализации (удаленный объект)
  • Разработать серверную программу
  • Разработать клиентскую программу
  • Скомпилируйте приложение
  • Выполнить заявку

Определение удаленного интерфейса

Удаленный интерфейс предоставляет описание всех методов конкретного удаленного объекта. Клиент связывается с этим удаленным интерфейсом.

Чтобы создать удаленный интерфейс —

  • Создайте интерфейс, который расширяет предопределенный интерфейс Remote, который принадлежит пакету.

  • Объявите все бизнес-методы, которые могут быть вызваны клиентом в этом интерфейсе.

  • Поскольку существует вероятность возникновения проблем с сетью во время удаленных вызовов, может возникнуть исключение с именем RemoteException ; брось это.

Создайте интерфейс, который расширяет предопределенный интерфейс Remote, который принадлежит пакету.

Объявите все бизнес-методы, которые могут быть вызваны клиентом в этом интерфейсе.

Поскольку существует вероятность возникновения проблем с сетью во время удаленных вызовов, может возникнуть исключение с именем RemoteException ; брось это.

Ниже приведен пример удаленного интерфейса. Здесь мы определили интерфейс с именем Hello, и у него есть метод с именем printMsg () .

import java.rmi.Remote; 
import java.rmi.RemoteException;  

// Creating Remote interface for our application 
public interface Hello extends Remote {  
   void printMsg() throws RemoteException;  
} 

Разработка класса реализации (удаленный объект)

Нам нужно реализовать удаленный интерфейс, созданный на предыдущем шаге. (Мы можем написать класс реализации отдельно или мы можем напрямую заставить серверную программу реализовать этот интерфейс.)

Разработать класс реализации —

  • Реализуйте интерфейс, созданный на предыдущем шаге.
  • Обеспечить реализацию всех абстрактных методов удаленного интерфейса.

Ниже приведен класс реализации. Здесь мы создали класс с именем ImplExample и реализовали интерфейс Hello, созданный на предыдущем шаге, и предоставили тело для этого метода, который печатает сообщение.

// Implementing the remote interface 
public class ImplExample implements Hello {  
   
   // Implementing the interface method 
   public void printMsg() {  
      System.out.println("This is an example RMI program");  
   }  
} 

Разработка серверной программы

Программа сервера RMI должна реализовывать удаленный интерфейс или расширять класс реализации. Здесь мы должны создать удаленный объект и связать его с RMIregistry .

Разработать серверную программу —

  • Создайте клиентский класс, из которого вы хотите вызвать удаленный объект.

  • Создайте удаленный объект , создав экземпляр класса реализации, как показано ниже.

  • Экспортируйте удаленный объект, используя метод exportObject () класса с именем UnicastRemoteObject, который принадлежит пакету java.rmi.server .

  • Получить реестр RMI с помощью метода getRegistry () класса LocateRegistry, который принадлежит пакету java.rmi.registry .

  • Свяжите удаленный объект, созданный с реестром, используя метод bind () класса Registry . В этот метод передайте строку, представляющую имя привязки и экспортируемый объект, в качестве параметров.

Создайте клиентский класс, из которого вы хотите вызвать удаленный объект.

Создайте удаленный объект , создав экземпляр класса реализации, как показано ниже.

Экспортируйте удаленный объект, используя метод exportObject () класса с именем UnicastRemoteObject, который принадлежит пакету java.rmi.server .

Получить реестр RMI с помощью метода getRegistry () класса LocateRegistry, который принадлежит пакету java.rmi.registry .

Свяжите удаленный объект, созданный с реестром, используя метод bind () класса Registry . В этот метод передайте строку, представляющую имя привязки и экспортируемый объект, в качестве параметров.

Ниже приведен пример программы RMI-сервера.

import java.rmi.registry.Registry; 
import java.rmi.registry.LocateRegistry; 
import java.rmi.RemoteException; 
import java.rmi.server.UnicastRemoteObject; 

public class Server extends ImplExample { 
   public Server() {} 
   public static void main(String args[]) { 
      try { 
         // Instantiating the implementation class 
         ImplExample obj = new ImplExample(); 
    
         // Exporting the object of implementation class  
         // (here we are exporting the remote object to the stub) 
         Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);  
         
         // Binding the remote object (stub) in the registry 
         Registry registry = LocateRegistry.getRegistry(); 
         
         registry.bind("Hello", stub);  
         System.err.println("Server ready"); 
      } catch (Exception e) { 
         System.err.println("Server exception: " + e.toString()); 
         e.printStackTrace(); 
      } 
   } 
} 

Разработка клиентской программы

Напишите в нем клиентскую программу, извлеките удаленный объект и вызовите требуемый метод, используя этот объект.

Разработать клиентскую программу —

  • Создайте клиентский класс, из которого вы собираетесь вызывать удаленный объект.

  • Получить реестр RMI с помощью метода getRegistry () класса LocateRegistry, который принадлежит пакету java.rmi.registry .

  • Получите объект из реестра, используя метод lookup () класса Registry, который принадлежит пакету java.rmi.registry .

    В этот метод необходимо передать строковое значение, представляющее имя привязки, в качестве параметра. Это вернет вам удаленный объект.

  • Функция lookup () возвращает объект типа remote, затем преобразует его в тип Hello.

  • Наконец, вызовите требуемый метод, используя полученный удаленный объект.

Создайте клиентский класс, из которого вы собираетесь вызывать удаленный объект.

Получить реестр RMI с помощью метода getRegistry () класса LocateRegistry, который принадлежит пакету java.rmi.registry .

Получите объект из реестра, используя метод lookup () класса Registry, который принадлежит пакету java.rmi.registry .

В этот метод необходимо передать строковое значение, представляющее имя привязки, в качестве параметра. Это вернет вам удаленный объект.

Функция lookup () возвращает объект типа remote, затем преобразует его в тип Hello.

Наконец, вызовите требуемый метод, используя полученный удаленный объект.

Ниже приведен пример клиентской программы RMI.

import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry;  

public class Client {  
   private Client() {}  
   public static void main(String[] args) {  
      try {  
         // Getting the registry 
         Registry registry = LocateRegistry.getRegistry(null); 
    
         // Looking up the registry for the remote object 
         Hello stub = (Hello) registry.lookup("Hello"); 
    
         // Calling the remote method using the obtained object 
         stub.printMsg(); 
         
         // System.out.println("Remote method invoked"); 
      } catch (Exception e) {
         System.err.println("Client exception: " + e.toString()); 
         e.printStackTrace(); 
      } 
   } 
}

Компиляция приложения

Чтобы скомпилировать приложение —

  • Скомпилируйте интерфейс Remote.
  • Скомпилируйте класс реализации.
  • Скомпилируйте серверную программу.
  • Скомпилируйте клиентскую программу.

Или же,

Откройте папку, в которой вы сохранили все программы, и скомпилируйте все файлы Java, как показано ниже.

Javac *.java

Хранимые Программы

Выполнение заявки

Шаг 1 — Запустите реестр rmi, используя следующую команду.

start rmiregistry

Начать выполнение

Это запустит реестр rmi в отдельном окне, как показано ниже.

Отдельное окно

Шаг 2 — Запустите файл класса сервера, как показано ниже.

Java Server

Запустить сервер

Шаг 3 — Запустите файл класса клиента, как показано ниже.

java Client 

Запустить клиент

Проверка — как только вы запустите клиент, вы увидите следующий вывод на сервере.