
- •Государственный комитет рф по высшему образованию
- •0. Введение.
- •0.1. Идея общей интеграции.
- •0.2. Взаимодействие на уровне процедур.
- •0.3. Распределенные объекты.
- •0.4. Почему corba.
- •1. Поддержка на различных платформах.
- •2. Устойчивость стандарта.
- •3. Сложность освоения.
- •4. Поддержка повторного использования кода.
- •1. Постановка задачи.
- •1.1. Классические объекты.
- •1.2. Распределенные объекты в терминах спецификации corba.
- •1.3. Требования, предъявляемые к orb-у.
- •2. СпецификацияCorba.
- •2.1. Объектная модель.
- •2.2. Обзор архитектурыCorba.
- •2.3. Пример Брокеров Объектных Запросов.
- •3. Структура системы.
- •3.1. Уточнение деталей реализации.
- •3.2. Структура ядра системы.
- •3.3. Структура библиотеки.
- •3.4.Структура подсистемы обработки запросов.
- •3.5. Входные и выходные данные.
- •4. Протокол обменаGiop.
- •4.1. Особенности и цели протокола.
- •4.2. Обзор протоколаGiop.
- •4.3. Синтаксис Общего Представления Данных -cdr.
- •4.4. Формат сообщений протокола giop.
- •4.5. Транспорт для протоколаGiop.
- •4.6. Реализация взаимодействия по протоколуGiop.
- •4.7. Поддержка протоколаGiop в рамках отображения дляObject Pascal.
- •5. Разработка отображения для языкаObject Pascal.
- •5.1. Множественное наследование.
- •5.2. Статические экземпляры классов.
- •Initialization
- •Initialization
- •6. Технология написания и отладки приложений, работающих с распределенными объектами.
- •6.1. Этапы разработки программы.
- •6.2. Технология написания сервера объекта.
- •6.3. Технология написания клиента объекта.
- •6.4. Отладочные возможности библиотеки.
- •7. Пример программы, работающей с распределенными объектами.
- •7.1. Последовательность действий при создании объекта.
- •7.2. Объект библиотека.
- •7.3. Сервер объекта.
- •7.3. Клиент объекта.
- •7.4. Окончательный результат.
- •8. Анализ конкурентоспособности программного продукта.
- •8.1. Введение.
- •8.2. Ситуация на рынке.
- •8.3. Программные продукты - конкуренты.
- •8.4. Основные понятия.
- •8.5. Параметры для оценки эффективности.
- •8.6. Расчет эффективности.
- •8.7. Цена.
- •8.8. Конкурентоспособность.
- •8.9. Выводы и прогнозы.
- •9. Вопросы эргономики и их решение для создания комфортных условий труда программистов.
- •9.1. Введение.
- •9.2. Рабочее место программиста.
- •9.3. Вредные факторы, присутствующие на рабочем месте и их классификация.
- •9.4. Вредные производственные воздействия.
- •9.5. Эргономические требования.
- •9.6. Эргономика окружающей среды.
- •9.7. Экологическая безопасность.
- •9.8. Выводы.
4.6. Реализация взаимодействия по протоколуGiop.
В соответствии со спецификацией протокола GIOP в системе реализована система кодирования сообщений в три этапа:
Сначала кодируются данные, которые передаются вместе с запросом. Для сообщений типа Requestи эти данные представляют параметры операции, сообщений типаReply - результат операции и выходные значения операции или же информация об возникшем исключении. СообщениеLocateReply в качестве тела могут содержать информацию об местонахождении объекта, которая запрашивалась в сообщенииLocateRequest.
Кодируется заголовок конкретного сообщения, который дополнительно определен для каждого типа сообщений, за исключением сообщений CloseConnection иErrorMessage, которые не имеют дополнительного заголовка.
Кодируется само сообщение как заголовок, в котором указан размер остальной части сообщения, полученной на этапах 1-2.
Не все типы сообщений проходят указанные этапы. Следующая таблица показывает, какие виды сообщений какие стадии кодирования проходят:
-
Сообщение
1. Данные сообщения
2. Заголовок сообщения
3. Общий заголовок
Request
Кодируется
Кодируется
Кодируется
Reply
Кодируется
Кодируется
Кодируется
CancelRequest
-
Кодируется
Кодируется
LocateRequest
-
Кодируется
Кодируется
LocateReply
Кодируется
Кодируется
Кодируется
CloseConnection
-
-
Кодируется
MessageError
-
-
Кодируется
На листе 4 представлены алгоритмы (1-3) кодирования заголовков двух наиболее используемых типов сообщений - Request иReply, а также кодирование общего заголовка сообщения. Лист 5 показывает алгоритм (4) кодирования одного значения произвольного типа, что требуется во многих случаях. Далее следует привести краткие пояснения к схемам алгоритмов.
Схема 1. Кодирование общего заголовка.
Кодирование общего заголовка состоит из следующих шагов.
Кодирование заголовка (поле magic) заключается в заполнении этого поля значениям“GIOP”.
Кодирование номера текущей версии кодирует текущую версию 1.0.
Кодирование порядка байт просто заносит в поле значение 1, что соответствует лидирующему наименее значащему байту. Разбор сообщений, которые имеют другой порядок байт на данный момент не реализовано.
Кодирование типа сообщения заносит в соответствующее поле значение от 0 до 6, соответствующее типу передаваемого сообщения.
Кодирование размера сообщения предполагает, что оставшаяся часть (заголовок и тело сообщения, если они есть) уже закодирована и известен ее размер.
Кодирование сообщения заключается просто в копировании уже подготовленного буфера.
Схема 2. Кодирование запроса.
Пункты 1-6 обеспечивают кодирование заголовка запроса.
Кодирование контекста (списка строк) зарезервировано на будущее для реализации поддержки дополнительных сервисов, таких как сервис транзакций. Имеющаяся реализация кодирует контекст как пустой список.
Кодирование номера запроса просто помещает значение, соответствующие уникальному идентификатору запроса типа unsigned long.
Кодирование необходимости ответа кодирует величину типа boolean значением типа 0 (false) или1 (true), которая сигнализирует, должен ли сервер посылать ответное сообщение после выполнения запроса или нет. В подавляющем количестве случаев это поле имеет значениеtrue.
Кодирование объекта заключается в копировании поля из имеющейся ссылки на объект. Значение этого поля кодирует местонахождение объекта у сервера. Имеющаяся реализация кодирует объект просто как 4-байтовую величину, представляющую указатель на объект.
Кодирование имени операции кодирует операцию как строку. Если происходит запрос на чтение или запись одного из атрибутов, то имя операции получается из дополнения имени атрибута префиксами ‘_get_’или‘_set_’ соответственно.
Кодирование поля Principalкак потока байт зарезервировано для возможного обеспечения в будущем поддержки аутентификации запросов. Данная реализация кодирует поле как пустой поток (длина равняется нулю).
8. Эти пункты в цикле кодируют все передаваемые (типовin иinout) операции параметры, то есть кодирование тела запроса.
Схема 3. Кодирование ответа.
Пункты 1-3 обеспечивают кодирование заголовка ответа.
Кодирование контекста (списка строк) зарезервировано на будущее для реализации поддержки дополнительных сервисов, таких как сервис транзакций. В ответе контекст должен совпадать с контекстом соответствующего запроса. Имеющаяся реализация кодирует контекст как пустой список.
Кодирование номера запроса просто помещает значение, которое копируется из запроса, ответ на который кодируется.
Кодирование типа ответа кодирует одно из четырех значений NO_EXCEPTION(0), которое показывает нормально выполнение запроса, SYSTEM_EXCEPTION (1) илиUSER_EXCEPTION (2), которые сигнализируют об возникновении исключения при отработке запроса илиLOCATION_FORWARD (3), что означает отсутствие запрашиваемого ответа у сервера и указывает на его (объекта) местонахождение. Данная реализация не поддерживает такое перенаправление запросов.
Далее в зависимости от успеха/неуспеха выполнения запроса происходит кодирование тела запроса.
В случае возникновения исключения оно кодируется строкой, которая однозначно его определяет.
7. Если есть результат, возвращаемый операцией, то кодируется значение результата.
9. Эти пункты в цикле кодируют все возвращаемые (типовout иinout) операцией параметры.
Схема 4. Кодирование значения произвольного типа.
На данной схеме приводится алгоритм кодирования значения любого, допустимого в OMG IDL типа. Кодирование происходит в соответствии с описанием в пункте 5.3. синтаксисом Общего Представления Данных (CDR). Следует заметить, что кодирование по этому алгоритму происходит только при использовании Интерфейса Динамических Вызовов(DII). Если же используется код, сгенерированный соответствующими утилитами, дляproxy-объекта, то с целью оптимизации в них происходит обращения напрямую к нужным подпрограммам кодирования соответствующих типов данных.