Рубрики

Удаленный вызов метода в Java

Удаленный вызов метода (RMI) — это API, который позволяет объекту вызывать метод для объекта, который существует в другом адресном пространстве, который может находиться на том же компьютере или на удаленном компьютере. Через RMI объект, работающий в JVM, присутствующей на компьютере (на стороне клиента), может вызывать методы объекта, присутствующего в другой JVM (на стороне сервера). RMI создает общедоступный объект удаленного сервера, который обеспечивает связь на стороне клиента и сервера посредством простых вызовов методов на объекте сервера.

Работа RMI

Связь между клиентом и сервером осуществляется с использованием двух промежуточных объектов: объекта-заглушки (на стороне клиента) и объекта Skeleton (на стороне сервера).

Заглушка Объект

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

  • Идентификатор удаленного объекта, который будет использоваться
  • Имя метода, который должен быть вызван
  • Параметры для удаленной JVM

Скелет Объект

Скелетный объект передает запрос от объекта-заглушки к удаленному объекту. Выполняет следующие задачи

  • Он вызывает нужный метод для реального объекта, присутствующего на сервере.
  • Он передает параметры, полученные от объекта-заглушки, в метод.

Шаги для реализации интерфейса

  1. Определение удаленного интерфейса
  2. Реализация удаленного интерфейса
  3. Создание объектов Stub и Skeleton из класса реализации с использованием rmic (rmi complier)
  4. Начать rmiregistry
  5. Создать и запустить серверную прикладную программу
  6. Создайте и выполните клиентскую прикладную программу.

Шаг 1: Определение удаленного интерфейса
Первое, что нужно сделать, — это создать интерфейс, который предоставит описание методов, которые могут вызываться удаленными клиентами. Этот интерфейс должен расширять интерфейс Remote, а прототип метода в интерфейсе должен выдавать исключение RemoteException.

// Создание интерфейса поиска

import java.rmi.*;

public interface Search extends Remote

{

    // Объявление прототипа метода

    public String query(String search) throws RemoteException;

}

Шаг 2: Реализация удаленного интерфейса

Следующим шагом является реализация удаленного интерфейса. Для реализации удаленного интерфейса класс должен быть расширен до класса UnicastRemoteObject пакета java.rmi. Кроме того, конструктор по умолчанию должен быть создан для выброса java.rmi.RemoteException от его родительского конструктора в классе.

// Java-программа для реализации интерфейса поиска

import java.rmi.*;

import java.rmi.server.*;

public class SearchQuery extends UnicastRemoteObject

                         implements Search

{

    // Конструктор по умолчанию для выброса RemoteException

    // из родительского конструктора

    SearchQuery() throws RemoteException

    {

        super();

    }

  

    // Реализация интерфейса запросов

    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 SearchQuery

ШАГ 4: Начать регистрацию
Запустите службу реестра, введя следующую команду в командной строке start rmiregistry

ШАГ 5: Создайте и запустите серверную прикладную программу
Следующим шагом является создание серверной прикладной программы и выполнение ее в отдельной командной строке.

  • Программа сервера использует метод createRegistry класса LocateRegistry для создания rmiregistry в JVM сервера с номером порта, передаваемым в качестве аргумента.
  • Метод rebind класса Naming используется для привязки удаленного объекта к новому имени.

// программа для серверного приложения

import java.rmi.*;

import java.rmi.registry.*;

public class SearchServer

{

    public static void main(String args[])

    {

        try

        {

            // Создать объект интерфейса

            // класс реализации

            Search obj = new SearchQuery();

  

            // rmiregistry внутри сервера JVM с

            // порт № 1900

            LocateRegistry.createRegistry(1900);

  

            // привязывает удаленный объект по имени

            // geeksforgeeks

            Naming.rebind("rmi://localhost:1900"+

                          "/geeksforgeeks",obj);

        }

        catch(Exception ae)

        {

            System.out.println(ae);

        }

    }

}

Шаг 6: Создайте и выполните клиентскую прикладную программу
Последний шаг — создание клиентской прикладной программы и ее выполнение в отдельной командной строке. Метод поиска класса Naming используется для получения ссылки на объект-заглушку.

// программа для клиентского приложения

import java.rmi.*;

public class ClientRequest

{

    public static void main(String args[])

    {

        String answer,value="Reflection in Java";

        try

        {

            // метод поиска для поиска ссылки на удаленный объект

            Search access =

                (Search)Naming.lookup("rmi://localhost:1900"+

                                      "/geeksforgeeks");

            answer = access.query(value);

            System.out.println("Article on " + value +

                            " " + answer+" at GeeksforGeeks");

        }

        catch(Exception ae)

        {

            System.out.println(ae);

        }

    }

}

Примечание. Приведенная выше клиентская и серверная программа выполняется на одном компьютере, поэтому используется localhost. Чтобы получить доступ к удаленному объекту с другого компьютера, локальный хост должен быть заменен IP-адресом, на котором находится удаленный объект.
Важные замечания:

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

Эта статья предоставлена Aakash Ojha . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Удаленный вызов метода в Java

0.00 (0%) 0 votes