Технология CORBA и особенности проектирования баз данных

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

p>Наконец, предусмотрен некий вспомогательный, но в некоторых случаях очень удобный режим - так называемый сервант по умолчанию. Суть этого режима состоит в том, что программист явно создает один-единственный сервант и регистрирует его как сервант, который является инкарнацией всех CORBA-объектов. Вот пример ситуации, когда такой подход вполне оправдан: для взаимодействия с базой данных вы создаете сотни, тысячи или миллионы CORBA-объектов - по одному на каждую запись, а затем создаете один сервант, не имеющий своего состояния, который обслуживает все эти объекты. Состояние каждого CORBA-объекта просто извлекается из соответствующей записи базы данных.

Итак, возможные значения опции RequestProcessingPolicyValue:

USE_ACTIVATE_OBJECT_MAP_ONLY - разрешено только явное создание сервантов с помещением указателей на них в AOM;

USE_DEFAULT_SERVANT - режим использования серванта по умолчанию;

USE_SERVANT_MANAGER - использование либо Activation-режима (если опция ServantRetensionPolicyValue, см. ниже, имеет значение RETAIN), либо Location-режима (если ServantRetensionPolicyValue имеет значение NON_RETAIN).

Режим обеспечения соответствия между сервантами и CORBA-объектами (ServantRetensionPolicyValue). Возможные значения - RETAIN (сохранять информацию о серванте в Active Object Map) и NON_RETAIN (использовать вновь создаваемый сервант только один раз).

Использование потоков (ThreadPolicyValue). Возможные значения - ORB_CTRL_MODEL (использовать потоковую модель, определяемую ORBом) и SINGLE_THREAD_MODEL (один поток обслуживает все запросы клиентов к сервантам данного POA).

Установка связи между клиентом и серверным объектом

После знакомства с объектными ссылками стало понятно, что установление связи между клиентом и серверным объектом заключается в получении клиентом объектной ссылки на этот объект. Конечно, передача объектной ссылки через файл, продемонстрированная ранее, хотя и возможна, но, разумеется, не может iитаться хоть сколько-нибудь удобным и универсальным способом.

Еще раз напомним: в CORBA клиент iитает, что все необходимые серверные объекты уже существуют, поэтому он (логически) всегда использует команду найти и никогда - команду создать.

В CORBA применяются два основных стандартных способа, позволяющих сделать серверный объект доступным для клиента, то есть, передать клиенту объектную ссылку на этот объект. Один из этих способов связан с использованием Сервиса Имен (Naming Service), второй - Трейдер-Сервиса.

Кроме стандартных служб, многие производители разрабатывают и поставляют свои собственные средства поиска. Для VisiBrokerа таким средством является Location Service, который базируется на использовании Smart Agent. Поскольку VisiBroker является одной из самых распространенных реализацией ORB, мы кратко рассмотрим и этот способ - более того, мы именно с него и начнем в силу простоты его использования.

Использование сконструированных пользователем типов данных

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

CORBA поддерживает базовые типы данных (octet, short, unsigned short, long, unsigned long, long long, unsigned long long, fixed, float, double, long double, boolean, char, wchar, string, wstring, enum и any), так называемые сконструированные типы данных (массивы, структуры, объединения, последовательности и типы-значения) и объектные ссылки. Кроме того, поддерживаются синонимы типов, которые создаются с помощью typedef (вряд ли читатель, не знающий C/C++, добрался до этого места, а остальным не нужно объяснять, что это такое).

Каждый из этих типов может быть описан на языке IDL.

С каждым типом сопоставлены метаданные, т.е. признак типа и дополнительная информация, вид которой зависит от конкретного типа Как метаданные, так и объекты любого типа могут быть созданы динамически, т.е. без помощи IDL.

Присутствует тип any, который может хранить данные любого типа В данной статье кратко рассказано об основных сконструированных типах данных, о строках и об any. Кроме того, немного рассказано о вспомогательных классах, которые генерирует компилятор idl2cpp.

Обращаем ваше внимание на то, что часть информации в каждом из разделов относится к CORBA вообще, а часть - только к отображению IDL на C++.

Имена при отображении на C++

Для увеличения переносимости C++-программ на разные платформы и операционные системы (на уровне исходного кода) вместо конкретных имен типов C++ - short, unsigned long, wchar_t, char*, bool и пр. - используются typedef-алиасы, например, CORBA::Short, CORBA::ULong, CORBA::WChar, CORBA::String_ptr, CORBA::Boolean. Использование typedef-алиасов при создании CORBA-программ существенно упрощает их разработку, особенно потому, что наряду с такими алиасами широко используются и вспомогательные классы, например, CORBA::String_var. Типы, имена которых заканчиваются на _var или _out, являются чрезвычайно полезными и удобными, хотя почти всегда можно обойтись и без них.

Типы _ptr не представляют ничего интересного - это просто typedef-синоним для указателя:

typedef unsigned long CORBA::ULong;

typedef CORBA::ULong* CORBA::ULong_ptr;

Совсем другое дело - _var-классы.

_var-классы

_var-классы являются чисто сервисными классами - если не хотите, можете их не использовать, но дело в том, что использовать их чрезвычайно удобно. Эти классы являются оболочками вокруг типов, описанных на IDL. В сущности, их можно рассматривать как разумные указатели (smart pointer) - эти классы выполняют освобождение занятых ранее ресурсов при их уничтожении или при выполнении операций присваивания. Приведем пример исполь