Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
HOR / TOTAL.DOC
Скачиваний:
8
Добавлен:
16.04.2013
Размер:
312.83 Кб
Скачать

3.3. Структура библиотеки.

Составными частями библиотеки (лист 2) являются:

  1. подсистема обработки запросов;

  2. часть реализации псевдообъектов;

  3. реализация всех основных функций.

В библиотеке присутствует часть реализации псевдообъектов, которая вместе с частью, реализованной в ядре системы полностью соответствует списку псевдообъектов, приведенных в спецификации CORBA и набору их свойств.

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

3.4.Структура подсистемы обработки запросов.

И ядро, и библиотека имеют в себе подсистему обработки запросов (лист 3), которая обеспечивает создание запроса к произвольному объекту и пересылку запроса приложению, в котором находится реализация данного объекта, а также обеспечивает прием и обработку запросов к объектам, для которых реализация находится внутри данного приложения.

Подсистема имеет два почтовых ящика - входной (Inbox3) и выходной(Outbox). Входной почтовый ящик связан с множеством приемников(Receiver), которые осуществляют пересылку сообщения произвольного размера. При этом конкретный приемник может быть связан с одним из логических устройств или структур - окном4, именованным каналом(Pipe)или портом для обмена по протоколуTCP/IP. Выходной почтовый ящик имеет также множество передатчиков, которые осуществляют передачу сообщений по тем же самым каналам связи.

Когда пользователь инициирует создание запроса вызовом функцииCORBA_Object_create_request, то запрос менеджер запросов(RequestManager) создает новый запрос на выполнение операции(OperationRequest). Далее пользователь может добавить аргументы, необходимые для выполнения операции посредством вызова процедуры CORBA_Request_add_arg. После этого можно либо послать запрос без получения (функцияCORBA_Request_send), либо послать с получением ответа от сервера объекта (функцияCORBA_Request_invoke). При посылке запрос направляется в выходной почтовый ящик, а оттуда перенаправляется в передатчик, который связан с реализацией данного объекта. Если запрос был послан с помощью операцииCORBA_Request_send, то подождать завершения или возникновения исключения можно при помощи функцииCORBA_Request_get_response.

Сообщение, пришедшее во входной ящик, анализируется и в зависимости от его типа выполняются различные действия. Если пришел ответ от сервера объекта на посланный ранее запрос, то этот ответ передается менеджеру запросов и далее из полученного сообщения выделяется информация об успешности завершения и полученных данных. Если же пришедшее сообщение является запросом от другого приложения на выполнение определенных действий он передается анализатору запросов (RequestAnalyser). Анализатор запросов на основании пришедших данных создает запрос к серверу объекта(ServerRequest)и в зависимости от предмета запроса (объекта) передает запрос процедуре динамического выполнения запросов (Dynamic Implementation Routine - DIR)данного объекта. Если объект был подключен к стандартной процедуреDIR, то она получает аргументы запроса, формирует стек вызова и передает выполнение конкретной процедуре пользователя (UserRoutine), реализующей данную операцию. В зависимости от результатов запроса в случае необходимости формируется сообщение - ответ, которое передается в выходной ящик и далее отсылается клиенту, инициировавшему запрос.

Соседние файлы в папке HOR