
- •JAVA-ТЕХНОЛОГИЯ
- •Remote Method Invocation
- •Недостатки RPC
- •Архитектура RMI
- •Схема RMI
- •Пример
- •Серверная часть.
- •Compute.java
- •Task.java
- •Реализация удаленного интерфейса
- •ComputeImpl.java
- •ComputeServer.java
- •ComputeServer.java
- •UnicastRemoteObject
- •UnicastRemoteObject
- •UnicastRemoteObject
- •Регистрация удаленных объектов
- •RMI registry
- •RMI-реестр
- •RMI-реестр
- •Менеджер безопасности
- •Передача объектов в RMI
- •Клиентская часть
- •Клиентская часть
- •ComputeClient.java
- •ComputeService
- •ComputeClient
- •Заглушки
- •Скелетные схемы
- •Компиляция и выполнение
- •Запуск RMI-клиента

JAVA-ТЕХНОЛОГИЯ
Сафонов Владимир Олегович
Профессор кафедры информатики, руководитель лаборатории Java- технологии (http://polyhimnie.math.spbu.ru/jtl)
Email: vosafonov@gmail.com
Лекция 23
Удаленные вызовы методов в Java: Remote Method Invocation (JNI)

Remote Method Invocation
Технология RMI, впервые представленная в JDK 1.1, позволяет Java-объекту, который выполняется на одной машине, вызвать метод объекта, выполняемый на другой машине.
Данная возможность играет фундаментальную роль для разработки распределенных Java-приложений
Идея технологии RMI основана на более ранней технологии RPC (Remote Procedure Call) для процедурного программирования, разработанной фирмой Sun в 1980-х гг.
(С)Сафонов В.О. 2013

Недостатки RPC
RPC поддерживает ограниченный набор простых типов данных.
Программисту необходимо знать специальный
язык определения интерфейса (IDL) для описания функций, которые допускают удаленный вызов.
(С) Сафонов В.О. 2013

Архитектура RMI
Архитектура RMI основана на принципе разделения определений поведения и его реализации
Данный принцип соответствует требованиям распределенных систем, в которых клиентам известны лишь определения сервисов, а серверы реализуют и предоставляют данные сервисы (SOA)
Клиентское
приложение
Интерфейс
запрос
результат
Серверное
приложение
Реализация
(С) Сафонов В.О. 2013

Схема RMI
Определение удаленного интерфейса с
объявлениями методов, которые клиент может вызвать у удаленного объекта.
Определение реализации удаленного объекта
для удаленного интерфейса. Любой объект, который реализует этот интерфейс, может быть использован в качестве удаленного объекта
Определение клиентского приложения, которое использует удаленную ссылку, чтобы взаимодействовать с реализацией интерфейса
(С)Сафонов В.О. 2013

Пример
Простое клиент-серверное приложение: Сервер вычислителя принимает задачи от клиентов, выполняет эти задачи и возвращает результаты
Сервер включает в себя интерфейс и класс
Интерфейс обеспечивает определение методов, которые могут быть вызваны клиентом. В сущности, интерфейс определяет представление клиента об удаленном объекте. Класс обеспечивает реализацию
(С)Сафонов В.О. 2013

Серверная часть.
1. Определение удаленного интерфейса
Удаленный интерфейс должен быть общедоступным – public
Удаленный метод должен быть объявлен в интерфейсе, который расширяет java.rmi.Remote
Remote представляет собой интерфейс-маркер
–он не объявляет каких-либо методов, поэтому не обременен реализацией класса
Все удаленные методы могут генерировать исключения класса RemoteException
(С)Сафонов В.О. 2013

Compute.java
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Compute extends Remote {
Object executeTask( Task t) throws RemoteException;
}
RemoteException является контролируемым исключением и бросается в результате какого- либо сбоя( неполадки сети и т.п. ).
(С) Сафонов В.О. 2013

Task.java
Второй интерфейс, необходимый для вычислителя, определяет тип Task.
Этот тип используется как аргумент метода executeTask в интерфейсе Compute.
import java.io.Serializable;
public interface Task extends Serializable {
Object execute();
}
RMI использует механизм сериализации объектов для транспортировки объектов между разными JVM.
(С) Сафонов В.О. 2013

Реализация удаленного интерфейса
Серверу необходимо создавать и инсталлировать удаленные объекты
Эта процедура установки может быть инкапсулирована в методе main() в самом классе, реализующем удаленный объект, или может быть включена в совершенно другой класс. Процедура установки должна:
Создать и инсталлировать менеджер безопасности.
Создать один или более экземпляров удаленного объекта.
Зарегистрировать как минимум один из удаленных
объектов в регистре RMI (или в другом сервисе именования, таком, как JNDI), для самозагрузки.
(С)Сафонов В.О. 2013