Чтобы написать 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
Проверка — как только вы запустите клиент, вы увидите следующий вывод на сервере.