- •107 Методические указания «Программное обеспечение сетей эвм. Часть 4. Версия 2. Развитие схемы «клиент-сервер» в com и corba»
- •Введение
- •1.1. Необходимость использования компонент
- •1.2. Методы встраивания компонентов
- •1.3. Основы com
- •1.4. Типы компонентов
- •1.5. Размещение управляющих элементов при помощи cWnd
- •1.6. Использование директивы #import
- •1.7. Компоновка тестовой программы
- •1.7.1 О компонентах
- •1.7.2 Регистрация компонентов
- •1.7.3 Импортирование библиотеки типов
- •1.7.4 Определение членов cDemoClientView
- •1.7.5 Создание компонентов
- •1.7.6 Создание точек взаимодействия
- •1.7.7 Синхронизация параметров
- •1.7.8 Обработка событий от компонентов
- •1.7.9 Очистка
- •1.7.10 Шаблонный код
- •1.9. Индивидуальные задания на работу
- •2.1. Проект. Основные принципы
- •2.2. Как создать компонент
- •Шаг 2: Создание компонента:
- •2.3. Значения по умолчанию
- •2.5. Индивидуальные задания на работу
- •3.1. Cоздание сервера com
- •3.2. Использование com-объектов
- •3.3. Индивидуальные задания на работу
- •Лабораторная работа № 4. Использование atl
- •4.1 Создание dcom-сервера с использованием atl
- •4.1.1 Введение в atl
- •4.1.2 Что такое atl?
- •4.1.3 Разделение труда
- •4.1.4 Создание хранилища компонентов с помощью atl Com AppWizard
- •4.1.5 Вставка кода заглушки/прокси-объекта.
- •4.1.7 Atl com-карта
- •4.1.9 Класс cComModule
- •4.1.10 Язык скриптов реестра в atl
- •4.1.11 Распределенная com (dcom)
- •4.1.12 Dcom и службы nt
- •4.1.13 Структура службы nt
- •4.1.14 Основанный на службах nt сервер сом
- •4.1.15 Создание проекта при помощи atl
- •4.1.16 Добавление функциональных средств
- •4.1.17 Функция CacheQuotes (dcomServiceXdcomService.Cpp)
- •4.1.18 Функция GetQuote (dcomServiceXdcomService.Cpp)
- •4.2 Создание dcom сервера
- •4.3 Создание dcom клиента
- •4.4 Индивидуальные задания на работу
- •Лабораторная работа № 5. Разработка corba приложений
- •5.1. Конфигурирование
- •5.2. Порядок действий
- •5.3. Объектно-ориентированный анализ и моделирование
- •5.4. Описание и трансляция объектов
- •5.5. Создание сервера
- •5.6. Создание клиента
- •5.7. Отладка объектов
- •5.8. Индивидуальные задания на работу
- •Лабораторная работа № 6. Адаптер роа
- •6.1. Архитектура poa
- •6.2. Политики poa
- •Политика обработки запросов
- •6.3. Создание серверов на основе poa
- •6.4. Индивидуальные задания на работу
- •Лабораторная работа № 7. Прикладная задача связи
- •7.1. Постановка задачи
- •7.1.1. Сотовая станция
- •7.1.2. Телефоны
- •7.1.3. Система
- •7.2. Функционирование системы
- •7.3. Индивидуальные задания на работу
- •Лабораторная работа № 8. Работа по умолчанию
- •8.1. Сервер с сервантом по умолчанию
- •8.2. Индивидуальные задания на работу
- •Лабораторная работа № 9. Создание менеджеров сервантов
- •9.1. Менеджеры сервантов
- •ServantActivator
- •ServantLocator
- •9.2. И снова практика
- •9.3. Индивидуальные задания на работу
- •Лабораторная работа № 10. Сервис именования
- •10.1. Сервис для именования (Naming Service)
- •10.2. Индивидуальные задания на работу
Лабораторная работа № 6. Адаптер роа
Применять адаптер POA несколько сложнее, чем BOA, но в награду за излишнюю возню программист получает полную независимость от платформы и невероятную гибкость создаваемых серверов CORBA. Поэтому темой этой работы будет знакомство с POA.
В CORBA объектный адаптер как таковой существует для выполнения различных рутинных операций на серверной стороне информационной системы. Брокер объектных запросов ORB сам по себе не может взаимодействовать с объектами CORBA напрямую, эти функции возложены на объектный адаптер — по сути своей некий местный администратор, распоряжающийся созданием, регистрацией и уничтожением объектов, а также их связью с внешним миром.
Для понимания архитектуры POA следует сначала ознакомиться с терминологией, которая будет использоваться на протяжении работы:
долгоживущий объект (persistent object) — объект CORBA, способный существовать за пределами процесса, в котором он был порожден;
временный объект (transient object) — объект CORBA, живущий только внутри процесса, в котором он был порожден;
се,рвант (servant) — физический программный код, реализующий абстрактный CORBA-объект;
менеджер сервантов (servant manager) — объект, отвечающий за управление ассоциациями между объектами и их сервантами, а также за проверку существования объектов;
менеджер POA (POA manager) — объект, который управляет состоянием POA, например, может ли последний обслуживать входящие запросы или нет;
активатор адаптеров (adapter activator) — объект, создающий POA в ответ на запросы, полученные в адрес POA, который в тот момент не существует;
идентификатор объекта (object ID) — идентификатор, который ассоциирует объекты CORBA и их серванты и служит для идентификации объекта в объектном адаптере POA, куда он помещен;
таблица активных объектов (active object map) — таблица, которая хранит соответствия между объектами CORBA и их сервантами с помощью идентификаторов объектов;
инкарнация (incarnation) — процесс установления ассоциации между объектами CORBA и их сервантами;
эфиризация (etherialization) — процесс расторжения связи между CORBA-объектами и их сервантами.
Некоторые из этих терминов уже знакомы по предыдущей работе.
6.1. Архитектура poa
Целесообразно рассмотреть вкратце архитектуру серверной части системы, использующей переносимый объектный адаптер. Поскольку объектный адаптер не виден со стороны клиента, хотя его имя и может упоминаться в процессе связывания с объектом, клиентская часть рассматриваться не будет.
Обычное архитектурное решение с несколькими экземплярами POA приведено на рис. 6.1., где главный POA, имя которого «RootPOA», - корневой объектный адаптер. Поскольку часто серверы создают несколько различных экземпляров объектного адаптера и располагают их в виде иерархического дерева, в его основание помещается «RootPOA». Такая схема очень похожа на файловую систему. Даже программный поиск подходящего адаптера выглядит как поиск файла в UNIX — корневой адаптер «RootPOA» в этом случае обозначается символом слэша «/». Отметим, что корневой адаптер всегда имеется в системе, и через него производятся все операции по созданию новых POA.
Рис. 6.1. Архитектурное решение с несколькими экземплярами POA
Из рис.6.1. также видно, что POA хранят ссылки на активные серванты. Под этим термином подразумевается конкретный существующий в памяти код, реализующий один или несколько объектов CORBA. Если POA использует политику (см. «Политики POA») RETAIN, то в специальной таблице активных объектов хранится ссылка на активный сервант и один или несколько объектных идентификаторов, соответствующих этому серванту. Если POA не содержит таблицы активных объектов или в последней ссылка на нужный сервант не была обнаружена, запрос передается специальному серванту по умолчанию. По сути, это самый обычный сервант, который может обработать запрос к любому объекту, зарегистрированному в его экземпляре POA. То есть все запросы, приходящие к этому POA, автоматически попадают серванту по умолчанию. Правда, для этого нужно задать политику USE_DEFAULT_SERVANT.
Часто в своей работе сервер CORBA может воспользоваться услугами менеджера сервантов. Последний в этом случае получит запрос и определит, существует ли объект, которому предназначается данный запрос, и если да, то какой сервант за него отвечает. Чтобы такая схема работала, следует установить политику USE_SERVANT_MANAGER.