Рассмотрим, что собой представляют следующие объявления интерфейсов на языке IDL с точки зрения объектов CORBA:

 

interface MyBaseInterface

{

void MyMethod_1();

void MyMethod_2();

};

 

interface MyDeriveredInterface : MyBaseInterface

{

void MyMethod_3();

};

 

Для простоты будем считать, что объект и интерфейс связаны один к одному – один объект не может поддерживать несколько интерфейсов (до появления CORBA 3.0 это требование определялось стандартом, сейчас – нет).

При наличии таких IDL-деклараций вы можете, например, создать 5 объектов типа MyBaseInterface и 10000 объектов типа MyDeriveredInterface. Каждый из этих объектов сопоставлен со своим типом и, кроме этого, имеет свой уникальный идентификатор. Однако создание вышеуказанных 10005 объектов в общем случае никак не связано с захватом памяти и сетевых ресурсов. Это связано с тем, что цикл жизни CORBA-объекта и цикл жизни его текущего серванта – совершенно разные вещи. Следует отличать процесс создания CORBA-объекта и процесс создания и уничтожения его сервантов. Следующий рисунок иллюстрирует взаимодействие между объектом и его сервантом. 

 

Жизненный цикл CORBA-объекта

Пока CORBA-объект существует, с ним могут сопоставляться тысячи сервантов (но не более одного одновременно). Эти серванты могут содержаться в адресных пространствах различных компьютеров и вообще могут быть реализованы на различных языках программирования. Все это возможно, так как связь между клиентом и CORBA-объектом посредством объектной ссылки является логической. Физическая связь устанавливается лишь тогда, когда для требуемого CORBA-объекта создается сервант и средства CORBA, в первую очередь ORB, что позволяет клиенту выполнить реальный вызов его удаленного метода.

Как уже говорилось при изучении отображения IDL на C++, классы сервантов (или классы, базовые для создаваемых программистом самостоятельно классов сервантов) создаются на стороне сервера соответствующим компилятором с языка IDL.

Связь между CORBA-объектами и их сервантами является довольно гибкой. Сервант может быть создать независимо от своего CORBA-объекта. Ассоциация между сервантом  и CORBA-объектом может быть установлена тогда, когда это действительно нужно. Один сервант может обслужить миллионы CORBA-объектов или один объект. Все зависит от желания программиста. Разделение жизненных циклов CORBA-объектов и их сервантов – ключевой момент в обеспечении высочайшей масштабируемости CORBA-системы.