
558 Глава 9. Распределенные системы объектов
В листинге 9,1 мы объявляем ссылку на объект C++. Для создания идентифи-
катора CORBA мы используем инструкцию
CORBA:
:ObjectId_var, где
CORBA —
тип
данных C++, предопределенный во всех стандартных реализациях CORBA на
языке C++. После этих объявлений создается истинный объект C++ my^object.
По терминологии CORBA этот объект соответствует слуге. Преобразование объ-
екта C++ в объект CORBA производится путем регистрации его в РОА (мы счи-
таем, что доступ к нему осуществляется через переменную роа). Результатом ре-
гистрации является идентификатор CORBA.
Важно отметить, что при создании второго объекта типа My__Servant регистра-
ция этого объекта C++ в РОА приведет к созданию такого же слуги, работающе-
го с другим состоянием этого класса. В тех случаях, когда РОА нужно поддержи-
вать объекты, порожденные из одного и того же определения класса, разумнее
зарегистрировать одного слугу и различать объекты только по их состоянию.
Этот принцип продемонстрирован на рис. 9.8, б, на котором каждый идентифи-
катор объекта ссылается на одного и того же слугу. В этом случае при обраще-
нии к объекту идентификатор объекта неявно передается слуге. Таким образом,
слуга сможет работать только с тем набором данных, который уникально описы-
вает идентифицированный объект.
Этот пример также иллюстрирует и другой важный момент: идентификатор
объекта CORBA однозначно ассоциирован с РОА. Когда в РОА регистрируется
слуга, РОА возвращает идентификатор объекта для этого слуги. С другой сторо-
ны,
мы можем не заметить, что разработчик приложения сначала создает иден-
тификатор, а уже потом передает его в РОА. Однако в обоих случаях этот иден-
тификатор будет спрятан в большой структуре данных, существующей в виде
глобальной ссылки на объект и идентифицирующей, кроме всего прочего, и РОА,
и сервер, на котором этот адаптер РОА расположен.
Независимо от того, поддерживает РОА одного слугу на объект или одного
слугу на все объекты, существует только один набор правил, который можно ас-
социировать с РОА. Правила могут быть самыми разными. Так, например, РОА
может поддерживать как нерезидентные, так и сохранные объекты. Точно так же
разными правилами может регламентироваться использование потоков выпол-
нения. Подробности можно найти в
[198].
Агенты
Чтобы способствовать использованию приложений-агентов, в CORBA принята
модель, согласно которой агенты систем разных типов могут работать совместно.
Вместо определения собственной модели агента, CORBA предоставляет стан-
дартный интерфейс для работы с агентами, который должны реализовывать лю-
бые системы. В таком подходе имеется потенциальное преимущество, поскольку
в одном распределенном приложении могут быть задействованы разные типы
агентов. Так, например, в CORBA Java-апплет может создать агента
Тс1
на плат-
форме D'Agents (мы описывали систему D'Agents в главе 3).
В CORBA агенты всегда определяются, исходя из системы агентов.
Система
агентов {agent system)
определяется как платформа, позволяющая создавать, вы-
полнять, переносить на другую машину или прекращать работу агентов. Каждая