Использование CORBA для объектного доступа к базе данных

Вадим Годунко <vgodunko@gmail.com>, 2007-2008 г.

При разработке современного программного обеспечения часто встают задачи взаимодействия нескольких программ расположенных на различных вычислительных машинах. При использовании языка программирования Ada программист имеет возможность выбора различных готовых программных средств для решения задач взаимодействия. В данной статье будет рассматриваться использование возможностей архитектуры CORBA для создания простейшей программы управления базой данных пользователей. Программа будет поэтапно совершенствоваться обретая всё новые технические свойства и глубже используя имеющиеся в составе CORBA средства.

Перед чтением этой статьи настоятельно рекомендуется ознакомиться с основнами архитектуры CORBA, основами отображения языка IDL в Ada и использованием транслятора idlac. (XXX Дать ссылки на соответствующие разделы)

Начальная реализация сервера

Реализация клиента

Неуязвимые объектные ссылки

Воскрешение объектов по требованию

Немного о безопасности

Прямой доступ к данным

Минимум знаний о CORBA

CORBA - Common Object Request Broker Architecture - набор спецификаций консорциума Object Management Group (OMG) посвященных различным аспектам организации взаимодействия программ в распределённых вычислительных средах. Спецификации не описывают какой-либо конкретной реализации а лишь определяют архитектуру, протоколы взаимодействия и прикладной интерфейс программного обеспечения. В качестве конкретной реализации будет рассматриваться программный продукт PolyORB версии GPL 2007.

Центральным компонентом архитектуры CORBA является брокер объектных запросов - Object Request Broker (ORB). В его задачу на стороне клиента входит получение запроса на выполнение удалённого вызова, поиск, соединение и передача запроса ORB сервера, ожидание ответа и возврат ответе приложению. На стороне сервера ORB выполняет ожидание поступления запроса, доведение полученного запроса до объекта и формирование ответа.

CORBA делает различие между объектом и объектной ссылкой. Объект это экземпляр некоторого класса имеющий состояние и расположенный на стороне сервера. Для выполнения операций над этим объектом клиент оперирует объектной ссылкой. Жизненный период объекта и объектной ссылки между собой никак не связан. Объектная ссылка может быть сохранена клиентом и использована в любое время, причём если объект при этом уже прекратил своё существование, то буде возбуждено исключение указывающее на отсутствие объекта.

Жизненный цикл объекта так же тернист. Объекту совершенно не обязательно постоянно находиться в памяти сервера и быть готовым к выполнению запросов - объект может активироваться при получении запроса и сразу же деактивироваться при завершении запроса. Объект может даже "пережить" программу, т.е. оставаться доступным после перезапусков сервера.

Для управления объектами и передачей запросов от ORB к объекту используются так называемые объектные адаптеры. CORBA предлагает несколько вариантов объектных адаптеров, но здесь будет рассматриваться только базовый - Portable Object Adapter (POA).

Для платформонезависимого описания интерфейсов сервера CORBA использует специальный язык описания - Interface Definition Language (IDL). Язык позволяет описывать простые и составные типы данных, интерфейсы объектов, а также группировать описания в модули.