- •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.2. Политики poa
При создании нового экземпляра POA можно настроить его иначе, чем другие POA. Этого добиваются, управляя политиками (policy), представляющими собой объекты CORBA, унаследованные от CORBA::Policy. Создавая объект POA операцией POA::create_POA, надо передать ссылки на настроенные объекты политик. Если какие-то объекты политик не указаны, считается, что передается POA политики по умолчанию.
Единожды созданный POA уже не может поменять свои установленные политики, — для этого нужно создать новый POA, а старый уничтожить. Для настройки поточной модели применяется объект поточной политики ThreadPolicy, у которого могут быть следующие значения:
ORB_CONTROL_MODEL — брокер объектных запросов заботится о распределении конкурирующих запросов по различным потокам, данная модель принята в VisiBroker;
SINGLE_THREAD_MODEL — все запросы от клиентов обслуживаются по очереди одним главным потоком.
Объект ThreadPolicy создается вызовом операции POA::create_thread_policy.
Политика продолжительности жизни объектов (LifespanPolicy) может отличаться следующим образом:
TRANSIENT — объекты существуют короткое время и «погибают» вместе с POA, где они были зарегистрированы;
PERSISTENT — объекты «долгоживущие» и могут пережить процесс, в котором они были созданы.
О временных и долгоживущих объектах сказано в предыдущей работе. Можно сказать лишь, что объект LifespanPolicy создается операцией POA::create_lifespan_policy.
Объект политики уникальности идентификаторов объектов (IdUniquenessPolicy) создается операцией POA::create_id_uniqueness_policy. С ее помощью определяют, может ли один сервант иметь сразу несколько идентификаторов объектов. Такая ситуация возникает, когда один сервант реализует сразу несколько объектов CORBA. Для IdUniquenessPolicy допустимы следующие значения:
UNIQUE_ID — сервант может иметь только один объектный идентификатор;
MULTIPLE_ID — сервант может иметь один или несколько идентификаторов.
Вызвав операцию POA::create_id_assignment_policy, программист может получить объект политики присвоения идентификаторов объектов (IdAssignmentPolicy), с помощью которого определяется, кто задает идентификаторы для объектов. Вот два возможных значения:
USER_ID — идентификатор для объекта задается программой;
SYSTEM_ID — адаптер объектов POA сам генерирует идентификатор и следит за его уникальностью.
Объект ServantRetentionPolicy определяет политику удержания сервантов в таблице активных объектов:
RETAIN — POA сохраняет активные серванты в таблице активных объектов;
NON_RETAIN — активные серванты в таблице активных объектов не удерживаются.
Для создания объекта вышеуказанной политики существует операция POA::create_servant_retention_policy.
Политика обработки запросов
Политика обработки запросов (объект RequestProcessingPolicy) определяет, как запросы обрабатываются адаптером объектов:
USE_ACTIVE_OBJECT_MAP — в таблице активных объектов ищется идентификатор объекта, и если он не найден, то возникает исключительная ситуация отсутствия объекта OBJECT_NOT_EXIST;
USE_DEFAULT_SERVANT — если идентификатор объектов в таблице не найден или действует политика NON_RETAIN, то запрос перенаправляется серванту по умолчанию; в этом случае при отсутствии такого серванта возникает исключение OBJ_ADAPTER;
USE_SERVANT_MANAGER — если в таблице активных объектов нет искомого идентификатора или установлена политика NON_RETAIN, то к поиску подходящего серванта подключается менеджер сервантов.
Операция POA::create_request_processing_policy создает нужный объект политики. Некоторые политики используются парами. Так, вместе с USE_ACTIVE_OBJECT_MAP должна быть установлена политика RETAIN, а к USE_DEFAULT_SERVANT надо добавить MULTIPLE_ID.
Для задания возможности скрытой активации сервантов применяется политика ImplicitActivationPolicy, экземпляр объекта которой возвращается операцией POA::create_implicit_activation_policy. У данной политики имеется всего два состояния:
IMPLICIT_ACTIVATION — POA может активировать серванты неявным способом; кроме того, требует установки политик SYSTEM_ID и RETAIN;
NO_IMPLICIT_ACTIVATION — скрытая активация не поддерживается.
Для корневого адаптера «RootPOA» системой установлены следующие политики: ORB_CTRL_MODEL, TRANSIENT, UNIQUE_ID, SYSTEM_ID, RETAIN, USE_ACTIVE_OBJECT_MAP_ONLY, IMPLICIT_ACTIVATION. Если используется VisiBroker 4.0, то к этому списку добавляется еще и специфическая для VisiBroker политика BY_POA, суть которой состоит в том, что только экземпляры POA регистрируются Smart Agent без активных объектов данного POA.