Портируемый объектный адаптер

В архитектуре CORBA адаптер представляет собой элемент, обеспечивающий создание и реализацию серверных объектов. До CORBA 2.1 в качестве такого элемента был определен стандартный адаптер – Основной Объектный Адаптер (Basic Object Adapter), поддержка которого регламентировалась для всех ORB. Спецификации Основного Адаптера были неполными, и разработчики создавали свои, весьма различные версии. В итоге адаптеры стали самой пестрой частью стандарта, т.е. наименее стандартизованной. Они жили своей независимой жизнью, демонстрируя капризный нрав и непокорный характер. POA (Portable Object Adapter), или Портируемый Объектный Адаптер, был впервые определен в CORBA 2.2. Он полностью интегрирован с другими спецификациями технологии, и является одним из основных усовершенствованных элементов серверной части в CORBA 3. Основной Адаптер просто исключен из CORBA. Конечно, создатели ORB могут его поддерживать в целях преемственности.

POA можно назвать практически новым элементом архитектуры, настолько отличается он от своего предшественника.

Перечислим обязанности объектного адаптера:

Адаптер переводит обращение к CORBA-объекту на язык, понятный серванту, т. е программному приложению. В свою очередь, скелетон может использоваться для перевода параметров клиентского запроса в форму аргументов операций серванта. Рис.2 проясняет логику работы адаптеров.

Рис. 2 Роль объектного адаптера в петедаче запросов

Различные объектные адаптеры поддерживают разные стили реализации сервантов.

Чем же был плох Основной Объектный Адаптер (BOA)?

Во-первых, спецификации BOA не описывали, как должен выглядеть скелетон, и как серванты связываются с ним. Отсюда трудности переноса приложений на другие платформы.

Во-вторых, не был регламентирован способ регистрации сервантов. Обычно это осуществлялось либо вызовом подходящего метода на адаптере, либо в момент инкарнации самого серванта. Все создатели ORB реализовывали регистрацию по-своему.

Наконец, полностью игнорировалась возможность многопотоковых серверных процессов. Но ведь именно такие процессы позволяют сложные задачи выполнять параллельно. Поэтому каждый ORB осуществлял работу с многопотоковыми процессами в собственном стиле.

Новый объектный адаптер POA призван компенсировать все недостатки Основного Адаптера. Основная его цель – обеспечить портируемость серверных элементов СОRВА, в частности, сервантов, через разные ORB.

Рассмотрим схему вызова клиентом объекта серверного приложения. Этот вызов обращается к объекту по объектной ссылке, которая уникально идентифицирует CORBA-объект в соответствующем пространстве имен. Через брокер объектных запросов запрос передается на сервер. Как уже упоминалось, часть объектной ссылки, объектный ключ, уникально идентифицирует объект в его серверном приложении. Этот объектный ключ позволяет ORB выбрать именно тот адаптер, который отвечает за вызываемый объект (к одному приложению может относиться несколько адаптеров). POA выделяет из объектного ключа объектный идентификатор, и по объектному идентификатору определяет, какой сервант связан с вызываемым объектом. Адаптер может узнать это по специальной Карте Активных Объектов, или вызвать приложение и попросить его обеспечить нужный сервант по идентификатору объекта, или использовать сервант, выставленный приложением по умолчанию. Далее с запросом начинает работать сервант. Он отвечает за выполнение запроса и возвращает результаты обратно к объектному адаптеру, который передает их брокеру объектных запросов, а тот в свою очередь – клиенту. Таким образом запрос передается из рук в руки, как эстафетная палочка. Можно провести некоторую аналогию с сетевой моделью, та же эстафета в передаче запроса и обработка идентификаторов-адресов.

Замечательной особенностью CORBA-среды является возможность автоматической активизации серверных объектов. Без этого CORBA не была бы всеобщей идеологией распределенных систем. Ведь иногда клиент посылает запрос «на деревню дедушке», а технология этого самого «дедушку» материализует. Мало того, вполне возможен запуск необходимого серверного процесса (процессов), а уже потом активизация объекта (т.е. материализация не только «дедушки», но и той самой деревни).

Основной Объектный Адаптер поддерживал 4 модели активизации серверных процессов (а не объектов).

Разделяемый сервер – сервер поддерживает разные объекты разных типов.

Устойчивый сервер. Не слишком удачный термин, так как это просто запускаемый вручную процесс (чаще всего с помощью программного скрипта).

Опережающий сервер – на каждую операцию. Один процесс – одна операция конкретного типа на CORBA-объекте.

Неделимый сервер – сервер поддерживает только один CORBA-объект. Один объект – один процесс. Для нового объекта создается новый процесс. В отличие от Основного Объектного Адаптера Портируемый ОбъектныйАдаптер (POA) поддерживает следующие модели активизации серверных объектов (прошу заметить, речь идет об объектах, а не о процессах).

Точная (прямая – explicit) активизация – регистрация сервантов для CORBA-объектов напрямую в серверной программе посредством прямого обращения к POA. Это удобно, если серверные приложения содержат немного CORBA-объектов.

Активизация по требованию. В серверном программном приложении регистрируется менеджер сервантов. Его и вызывает POA, когда получает запрос для CORBA-объектов, которые еще не активизированы. Менеджер сервантов в этом случае осуществляет одно из следующих действий:

инкарнирует сервант, если нужно, и регистрирует его в POA, который затем передает соответствующие запросы напрямую серванту, минуя менеджер;

пересылает запрос другому объекту;

отвечает POA, что CORBA объект разрушен (destroyed);

Безусловная активизация. Сервант активизируется без уведомления об этом POA

Сервант по умолчанию. Сервант по умолчанию (default servant) используется для запросов к тем CORBA-объектам, которые еще не активизированы и не зарегистрированы в менеджере сервантов. Такие серванты особенно полезны, когда используется DSI (Dynamic Skeleton Interface), чтобы инкарнировать все CORBA-объекты без привлечения менеджера сервантов. Для связок сервант-объект POA также предлагает различные модели.

Каждый CORBA-объект активизируется своим сервантом. Девиз: личный сервант – каждому объекту. Взаимно-однозначное соответствие между CORBA-объектами и сервантами не подходит, когда серверное приложение содержит большое количество CORBA-объектов.

POA позволяет одному серванту инкарнировать несколько CORBA-объектов (для экономии серверных ресурсов). Примером может служить ситуация, когда объект представляет собой запись в БД, а его идентификатором является ключ. Для всех таких объектов можно использовать один сервант, который по ключу обращается к соответствующему объекту.

Активизация сервантов только потребованию клиента – если есть запрос.


[назад][содержание][вперед]

Hosted by uCoz