RMI обозначает дистанционный вызов метода . Это механизм, который позволяет объекту, находящемуся в одной системе (JVM), получать доступ / вызывать объект, запущенный в другой JVM.
RMI используется для создания распределенных приложений; он обеспечивает удаленную связь между Java-программами. Это предусмотрено в пакете java.rmi .
Архитектура приложения RMI
В приложении RMI мы пишем две программы: серверную (на сервере) и клиентскую (на клиенте).
-
Внутри серверной программы создается удаленный объект, и ссылка на этот объект становится доступной для клиента (с использованием реестра).
-
Клиентская программа запрашивает удаленные объекты на сервере и пытается вызвать его методы.
Внутри серверной программы создается удаленный объект, и ссылка на этот объект становится доступной для клиента (с использованием реестра).
Клиентская программа запрашивает удаленные объекты на сервере и пытается вызвать его методы.
Следующая диаграмма показывает архитектуру приложения RMI.
Давайте теперь обсудим компоненты этой архитектуры.
-
Транспортный уровень — этот уровень связывает клиента и сервер. Он управляет существующим соединением, а также устанавливает новые соединения.
-
Заглушка — заглушка — это представление (прокси) удаленного объекта на клиенте. Он находится в клиентской системе; он действует как шлюз для клиентской программы.
-
Скелет — это объект, который находится на стороне сервера. заглушка связывается с этим скелетом для передачи запроса удаленному объекту.
-
RRL (Remote Reference Layer) — это уровень, который управляет ссылками, сделанными клиентом на удаленный объект.
Транспортный уровень — этот уровень связывает клиента и сервер. Он управляет существующим соединением, а также устанавливает новые соединения.
Заглушка — заглушка — это представление (прокси) удаленного объекта на клиенте. Он находится в клиентской системе; он действует как шлюз для клиентской программы.
Скелет — это объект, который находится на стороне сервера. заглушка связывается с этим скелетом для передачи запроса удаленному объекту.
RRL (Remote Reference Layer) — это уровень, который управляет ссылками, сделанными клиентом на удаленный объект.
Работа приложения RMI
Следующие пункты суммируют, как работает приложение RMI —
-
Когда клиент выполняет вызов к удаленному объекту, он принимается заглушкой, которая в конечном итоге передает этот запрос в RRL.
-
Когда RRL на стороне клиента получает запрос, он вызывает метод invoke () объекта remoteRef . Он передает запрос в RRL на стороне сервера.
-
RRL на стороне сервера передает запрос в Skeleton (прокси-сервер на сервере), который, наконец, вызывает требуемый объект на сервере.
-
Результат передается обратно клиенту.
Когда клиент выполняет вызов к удаленному объекту, он принимается заглушкой, которая в конечном итоге передает этот запрос в RRL.
Когда RRL на стороне клиента получает запрос, он вызывает метод invoke () объекта remoteRef . Он передает запрос в RRL на стороне сервера.
RRL на стороне сервера передает запрос в Skeleton (прокси-сервер на сервере), который, наконец, вызывает требуемый объект на сервере.
Результат передается обратно клиенту.
Маршаллинг и демаршаллинг
Всякий раз, когда клиент вызывает метод, который принимает параметры на удаленном объекте, параметры объединяются в сообщение перед отправкой по сети. Эти параметры могут быть примитивного типа или объектов. В случае примитивного типа параметры объединяются и к нему прикрепляется заголовок. Если параметры являются объектами, они сериализуются. Этот процесс известен как сортировка .
На стороне сервера упакованные параметры разделяются, а затем вызывается требуемый метод. Этот процесс известен как демаршаллинг .
Реестр RMI
Реестр RMI — это пространство имен, в котором размещены все объекты сервера. Каждый раз, когда сервер создает объект, он регистрирует этот объект в RMIregistry (используя методы bind () или reBind () ). Они зарегистрированы с использованием уникального имени, известного как имя привязки .
Чтобы вызвать удаленный объект, клиенту нужна ссылка на этот объект. В это время клиент выбирает объект из реестра, используя его имя привязки (используя метод lookup () ).
Следующая иллюстрация объясняет весь процесс —
Цели РМИ
Ниже приведены цели RMI —