
- •Вызовы удаленных процедур
- •План
- •Для чего нужно?
- •Промежуточное программное обеспечение
- •RPC middleware
- •Преимущества
- •Где используются?
- •Какие существуют реализации?
- •Основные определения
- •Схема запроса
- •Вызов удаленной процедуры
- •Выполнение процедуры
- •Синхронное и асинхронное
- •Синхронное выполнение
- •Асинхронное выполнение
- •Обратный вызов
- •Авторизация
- •RPC на реальных машинах
- •Разработка RPC программ
- •Язык описания интерфейсов (rpcgen)
- •Другие недостатки SUN RPC
- •CORBA – common object relations broker architecture
- •Объектно-ориентированный подход
- •Распределенные объектные системы
- •CORBA
- •Преимущества
- •Реализации
- •Структура
- •ORB – object relations broker
- •Взаимодействие между
- •Прокси и адаптор
- •Взаимодействие между объектами
- •Объектная ссылка (IOR)
- •Взаимодействие между объектами
- •Службы
- •Поиск объектов
- •Служба имен
- •Поиск в службе имен
- •Хранилища реализаций и интерфейсов
- •CORBA
- •DCOM
- •Компонентная модель
- •Пример запуска CORBA объекта
- •Язык описания интерфейса
- •Особенности
- •Примеры
- •Вопросы ?

Хранилища реализаций и интерфейсов
Базы данных, которые содержат информацию, достаточную для запуска серверных приложений (когда не доступен IOR)
Хранилище реализаций – полный путь к программе, которую нужно запустить для создания нужного объекта (сервер)
Хранилище интерфейсов – информация о том для какого интерфейса к какому серверу обращаться (клиент)
Необходимо лишь указать, на какой машине и каком порту работает хранилище реализаций и служба имен

CORBA

DCOM

Компонентная модель
Пользователь
Машина 3 Распределенное приложение (программа), которое при
необходимости выполнения некоторых действий обращается к разным своим компонентам, работающим на разных машинах
|
|
Машина 1 |
|
Машина 2 |
Машина 1 |
|
|
||
|
|
|
|
|
Компонент 1 |
|
Компонент 2 |
|
Компонент 3 |
|
|
|
|
|
|
|
|
|
|

Пример запуска CORBA объекта
<HTML>
<HEAD>
<TITLE> CORBA</TITLE> </HEAD>
<BODY>
<a href="http://www.somewhere.org/cgi-bin/client?- ORBImplRepoAddr+inet:cluster.univ.kiev.ua:5678+-
ORBNamingAddr+inet:cluster.univ.kiev.ua:5679
">Click</a>
<P>
</HTML>

Язык описания интерфейса
Для разработки распределенных программ достаточно знать только интерфейсы (имена объектов и прототипы функций, которые необходимо для них вызывать)
Существует специальный язык для описания интерфейсов – IDL (interface description language)
При компиляции файла описания интерфейса создаются файлы с каркасными реализациями на нужном языке программирования (Java, C, C+ +, Ada…)
Пользователь использует каркасные классы для встраивания в них логической части

IDL -> C++
IDL
interface adding_machine{
void add(in unsigned long X); void subtract(in unsigned long X); long result();
};
Компиляция
idl adding_machine.idl
Создаются каркасные классы
class adding_machine : virtual public CORBA::Object{…} class adding_machine_stub : virtual public adding_machine{…} class adding_machine_skel : virtual public adding_machine{…}
Пользователь определяет реализацию, как производные классы от какркасных class adding_machine_impl : virtual public adding_machine_skel{
void add(in unsigned long X){…}
}

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

Примеры
Десктоп-системы (GNOME, KDE, MS Windows DCOM)
Java приложения (сервлеты, Java Beans, Java RMI)
Системы банк-клиент
