14.01.01
CORBA (расшифровывается как Common Object Request Broker) это технология, которая позволяет рассматривать компоненты распределенной системы как объекты, отвечающие некоторым определенным интерфейсам. Эта технология дает возможность единым образом конструировать эти интерфейс при помощи специального декларативного языка IDL (Interface Definition Language). При этом интерфейс и его описание не зависит от используемого языка программирования, операционной системы или архитектуры процессора. Таким образом, один объект может быть написан на C++, другой --- на Java, и эта два объекта могут успешно друг с другом взаимодействовать и при этом не заботиться о формате данных (например, представления целых чисел или символов).
Эта возможность очень удобна для программистов, потому что используя такой подход можно конструировать взаимодействие между распределенными объектами при помощи тех же средств, которые применяются для описания взаимосвязей обычных объектов в пределах одной программы на одном компьютере. Популярные CASE-средства, такие как Rational Rose, WithClasses или Together, позволяют создавать UML-схемы и экспортировать их в описания интерфейсов IDL.
Основой технологии CORBA является ORB (Object Request Broker) --- нечто, что позволяет передавать сообщения от одного объекта к другому. Это "нечто" может быть реализовано в виде библиотеки, специального сетевого сервиса, объектно-ориентированной СУБД или уже быть включенным в операционную систему. ORB дает возможность не задумываться объектам, которых он обслуживает, о том, где находятся другие объекты, которым передаются сообщения. Кроме того, он скрывает все детали реализации объектов, оставляя снаружи только их интерфейсы.
Под названием "реализация CORBA", по сути, понимается как раз наличие конкретного ORB и средств для общения с ним. Кроме того, в реализацию CORBA входят дополнительные утилиты, такие как транслятор интерфейса, написанного на IDL, в код, который будет обеспечивать поддержку сетевых средств CORBA в конкретном языке программирования (например, Java или C++). Таким образом, один ORB обеспечивает средства для общения объектов, написанных при помощи средств, с ним поставляемым.
Это все не было бы так интересно, если бы отсутствовала возможность взаимного использования объектов, написанных и существующих в сети при посредстве различных ORB. Эта возможность существует и достигается она при помощи специального протокола взаимодействия между ORB, что позволяет передавать сообщения и запросы от одного ORB к другому. Поэтому есть возможность вызывать методы любого объекта, который существует на данный момент в сети.
Каждый объект определяется специальной ссылкой на него. Эта сслыка служит аналогом указателя в терминологии обычных языков программирования. Для того, чтобы получить доступ к некоторому объекту, сначала необходимо каким-то образом узнать ссылку на него. Удобным является то, что существуют средства преобразования ссылки в строку и обратно. Подобная строка едина для всех ORB и позволяет уникальным образом идентифицировать объект. Опять же, было бы не особенно удобным пользоваться этой услугой, если бы не существовало средств для получения ссылок на объекты через их наименования, интерфейсы и т.п.
Одной из самых главных черт технологии CORBA является полное скрытие деталей реализации. Об этом уже написано выше, но хотелось бы еще раз подчеркнуть это свойство. Используя CORBA, пользователь некоторого объекта видит перед собой только описание интерфейсов объекта в виде IDL, например:
interface Random {
// return non-negative long
// integer in the interval [0, 2^31)
long lrand48();
// return signed long integer
// in the interval [-2^31, 2^31)
long mrand48();
};
Это реальный интерфейс демонстрационного объекта, доступный по адресу random.org. Объект идентифицируется строкой
IOR:000000000000000f49444c3a52616e646f6d3 a312e300000000000010000000000000050000100 0000000016706c616e7874792e6473672e63732e7 463642e69650006220000002c3a5c706c616e7874 792e6473672e63732e7463642e69653a52616e646 f6d3a303a3a49523a52616e646f6d00
и позволяет получить случайное число. Смотря на эти данные, пользователь объекта ничего не знает о том, как устроен генератор случайных чисел, на каком языке программирования он написан и где находится. Но после некоторых предварительных действий в своей программе (инициализация ORB) он может использовать этот генератор случайных чисел как обычный объект, который написан на используемом языке программирования:
for(int i = 0; i < 10; i++)
printf("%li\n", obj->lrand48();
Вообще говоря, клиент может вообще сначала не знать интерфейса объекта, который пытается использовать. Средствами ORB можно узнать этот интерфейс во время выполнения (без IDL) и сгенерировать запрос к объекту на основе его интерфейса.
Таким образом, CORBA дает возможность прозрачного использования различных объектов, вне зависимости от их месторасположения и используемого языка программирования. Это очень удобно, поскольку при помощи CORBA для написания распределенной программной системы от программиста не требуется знаний сетевых протоколов или заботы об исключительных ситуациях.
Но... как обычно, и у этой технологии есть свои недостатки. Прежде всего, за все удобства надо расплачиваться. Использование CORBA более ресурсоемко, чем использование менее "удобных" технологий, например, интерфейса сокетов. Кроме того, как мне кажется, CORBA становится слишком перегружена заложенными в нее возможностями. Понятно, что большая часть задач решается при помощи CORBA без использования всех ее возможностей, но их количество ведет к усложнению реализаций и, как следствие, к большему количеству ошибок. В дополнение еще можно сказать о том, что CORBA относительно молодая (относительно того же интерфейса сокетов), поэтому значительно менее "обкатанная" технология.
На мой взгляд, CORBA является весьма перспективной технологией, но на текущий момент я бы не стал рекомендовать ее к использованию. Связано это просто с отсутствием доверия к ее реализациям и сомнением в быстродействии.
| http://www.corba.org | Официальный сайт CORBA. |
| http://www.omg.org | Официальный сайт OMG. |
| http://www.mico.org | Официальный сайт MICO (Mico Is COrba), реализация CORBA 2.3 для C++, распространяемая по лицензии GPL. Очень хорошая документация, содержащая подробно прокомментированные примеры; рекомендую знакомиться с CORBA именно по этой документации. |
| http://www.cetus-links.org/oo_ | Коллекция ссылок по CORBA на сайте Cetus links. |
| http://random.org | Генератор "настоящих" случайных чисел. |