Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы Мартын 1(ComCorbaLab2004).doc
Скачиваний:
30
Добавлен:
10.02.2016
Размер:
1.81 Mб
Скачать

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.