- •Лекция 12
- •Клиент-сервер
- •Использование proxy (представителей)
- •Технологии
- •Технология RMI
- •Классы-заглушки (stubs)
- •Использование proxy (представителей)
- •Удаленные объекты
- •Интерфейсы и их реализации
- •Определение удаленных объектов
- •Определение удаленных объектов
- •Диаграмма наследования классов
- •Соглашения именования RMI
- •Поиск объекта-сервера
- •Программа-сервер
- •Программа-сервер (продолжение)
- •Запуск сервера
- •Запуск программы клиента
- •Программный код на стороне клиента
- •Программный код на стороне клиента (продолжение)
- •Файл политики безопасности
- •Последовательность действий для запуска программ
- •Использование proxy (представителей)
Лекция 12
Работа с удаленными объектами
Клиент-сервер
Клиент |
|
Сервер |
|
|
|
Передача запроса
Получение ответа
Использование proxy (представителей)
Клиент |
|
proxy |
|
gjke |
|
Сервер |
|
|
|
|
|
|
|
Локальный вызов |
|
|
|
||
метода proxy |
|
Локальный |
|||
|
|
Передача запроса |
|
||
|
|
|
вызов метода |
||
|
|
|
|
Локальный |
|
|
|
|
|
||
|
|
|
|
сервера |
|
|
|
|
|
вызов метода |
|
|
|
|
|
|
|
|
|
|
|
сервера |
|
|
|
|
|
|
|
|
|
|
|
Получение |
|
|
|
|
|
|
|
Получение ответа |
|
результатов |
Получение |
|
локального |
||
|
|
вызова метода |
||
результатов |
|
|
|
|
выполнения |
|
|
|
|
метода |
|
|
|
Технологии
RMI (Remote Method Invocation) — технология удаленного использования Java объектов
CORBA (Common Object Request Broker Architecture) — технология, позволяющая взаимодействовать объектам, которые были разработаны на разных языках программирования.
DCOM (Distributed Component Object Model)
— технология Microsoft (аналог CORBA)
SOAP (Simple Object Access Protocol) — широко используется в веб-сервисах
Технология RMI
Пример: вызов метода «Product find(Customer c)» удаленного объекта Warehouse
Клиент |
|
Сервер |
|
|
|
Передача объекта Customer
Вызов
метода
find()
Получение объекта Product
Классы-заглушки (stubs)
При вызове удаленных методов вызывается (локально) метод класса-заглушки.
Метод класса заглушки производит:
Развертывание параметров (marshalling)
Передачу данных на сервер Объект получатель выполняет:
Свертывание параметров
Поиск вызыванного объекта
Вызов данного метода
Извлечение и развертывание возвращаемого значения или исключения
Передачу пакета клиенту
Использование proxy (представителей)
Пример:
int q = centralWarehouse.getQuantity("Super Vacuum Cleaner");
Клиент |
|
заглушка |
|
получатель |
|
Сервер |
|
|
|
|
|
|
|
Локальный вызов |
|
|
|
|
||
метода заглушки |
Передача развернутых |
|
Локальный |
|||
|
|
|
|
|||
|
|
|
параметров |
|
вызов метода |
|
|
|
|
|
Локальный |
||
|
|
|
|
|||
|
|
|
|
|
сервера |
|
|
|
|
|
|
вызов метода |
|
|
|
|
|
|
|
|
|
|
|
|
|
сервера |
|
|
|
|
|
|
|
|
|
|
|
|
Возврат |
|
|
|
|
|
|
|
Передача развернутого |
|
результата |
|
|
|
выполнения |
|
Возврат |
возвращенного значения |
|
||
|
метода |
|||
значения или |
или исключения |
|
|
|
генерация |
|
|
|
|
исключения |
|
|
|
Удаленные объекты
Типы удаленных объекты должны быть описаны в виде интерфейса:
public interface Warehouse { int getQuantity(String desc)
throws RemoteException;
Product getProduct(Customer cust) throws RemoteException;
Product getProduct(Customer cust) throws RemoteException;
}
Объявление переменной:
Warehouse centralWarehouse = ...
Интерфейсы и их реализации
Объекты, совместно используемые сервером и клиентом должны описываться интерфейсом.
interface Product extends Remote {
String getDescription() throws
RemoteException;
}
Клиент не хранит копии объектов сервера, а хранит лишь ссылки на объекты-заглушки
Определение удаленных объектов
Product p = ...;
// клиент получает ссылку заглушки String d = g.getDescription();
System.out.println(d);
Описание класса (на сервере) public class ProductImpl
extends UnicastRemoteObject implements Product
{
private String descr;