Компонентная модель CORBA
Компонентная модель CORBA (CORBA Component Model, CCM) — это спецификация, определяющая стандартную серверную компонентную архитектуру для создания, развёртывания и управления распределёнными приложениями в среде CORBA (Common Object Request Broker Architecture). CCM расширяет базовую объектную модель CORBA, добавляя поддержку компонентов с управляемым жизненным циклом, контейнерами, портами (фасадами, приёмниками, источниками событий) и возможностью сборки приложений из готовых блоков. Модель была разработана консорциумом Object Management Group (OMG) и стандартизирована в начале 2000-х годов как альтернатива более сложным и менее гибким подходам, таким как Enterprise JavaBeans (EJB) в мире Java.
История
Разработка CCM началась в конце 1990-х годов, когда OMG осознала необходимость стандартизации компонентного подхода для CORBA. До этого CORBA предлагала только объектную модель, где каждый серверный объект реализовывался как отдельный CORBA-сервер, что приводило к дублированию кода и сложностям в управлении. Первая версия спецификации CCM была принята в 1999 году (CORBA 3.0), а окончательная версия — в 2002 году (CORBA 3.0.1). Модель была задумана как «лёгкая» альтернатива EJB, но с сохранением всех преимуществ CORBA: независимость от языка программирования, платформы и операционной системы.
На практике CCM не получила широкого распространения в коммерческих проектах из-за сложности реализации, конкуренции со стороны веб-сервисов (SOAP, REST) и Java EE. Однако она использовалась в некоторых нишевых областях, таких как телекоммуникационное оборудование (например, в системах управления сетями) и военные системы. В России CCM применялась в проектах, связанных с автоматизацией промышленных процессов и созданием распределённых информационных систем для государственных нужд.
Архитектура и основные понятия
CCM базируется на концепции компонента — автономного модуля, который реализует определённую бизнес-логику и взаимодействует с внешним миром через строго определённые интерфейсы. Компоненты CCM не являются самостоятельными процессами; они выполняются внутри контейнера — среды, предоставляющей системные сервисы (жизненный цикл, безопасность, транзакции, персистентность). Контейнер, в свою очередь, работает внутри сервера приложений CORBA.
Типы компонентов
CCM определяет три основных типа компонентов, различающихся по способу управления состоянием:
- Сессионные (Session) — существуют только в течение сеанса работы клиента. Не сохраняют состояние между вызовами. Бывают без состояния (stateless) и с состоянием (stateful). Пример: компонент, обрабатывающий запросы на авторизацию.
- Сущностные (Entity) — имеют постоянное состояние, хранящееся в базе данных. Могут быть разделяемыми между несколькими клиентами. Пример: компонент, представляющий запись о клиенте.
- Управляемые сообщениями (Message-Driven) — асинхронные компоненты, реагирующие на сообщения из очередей или тем. Не имеют прямого клиентского интерфейса. Пример: компонент, обрабатывающий заказы, поступающие через JMS.
Портовая модель
Взаимодействие компонента с внешним миром осуществляется через порты — точки соединения, которые могут быть трёх типов:
- Фасады (Facets) — интерфейсы, предоставляемые компонентом для вызова клиентами. Аналог IDL-интерфейсов в CORBA.
- Приёмники (Receptacles) — точки подключения к другим компонентам. Позволяют компоненту вызывать методы других компонентов, не зная их точного расположения.
- Источники событий (Event Sources) — порты, генерирующие события, на которые могут подписываться другие компоненты. Обеспечивают асинхронное взаимодействие по модели «публикация-подписка».
Развёртывание и конфигурация
CCM включает спецификацию Deployment and Configuration (D&C), которая описывает, как компоненты собираются в приложения, как они развёртываются на серверах и как конфигурируются. Для этого используется XML-описание (CCM Deployment Descriptor), содержащее информацию о зависимостях, параметрах инициализации, требованиях к ресурсам. Развёртывание может быть как статическим (заранее определённым), так и динамическим (с использованием службы управления).
Сравнение с другими компонентными моделями
CCM часто сравнивают с Enterprise JavaBeans (EJB) и COM+ (Component Object Model Plus). Основные отличия:
- Языковая независимость: CCM поддерживает любой язык, для которого существует CORBA-привязка (C++, Java, Python, Ada, COBOL и др.), тогда как EJB привязан к Java, а COM+ — к языкам, поддерживающим COM (C++, C#, Visual Basic).
- Стандартизация: CCM — открытый стандарт OMG, не зависящий от одного поставщика. EJB — стандарт Java Community Process (JCP), но его реализация зависит от конкретного сервера приложений (например, JBoss, WebLogic).
- Масштабируемость: CCM изначально проектировалась для высоконагруженных распределённых систем, где требуется строгая типизация и поддержка транзакций. COM+ больше ориентирован на одноплатформенные решения Windows.
- Сложность: CCM считается более сложной в изучении и реализации, чем EJB, из-за большего числа концепций (порты, контейнеры, развёртывание). Однако для опытных разработчиков CORBA она предоставляет более гибкие возможности.
Применение
CCM нашла применение в следующих областях:
- Телекоммуникации: системы управления сетями (TMN, OSS/BSS), где требуется высокая надёжность и поддержка большого числа параллельных сессий.
- Военные и авиакосмические системы: распределённые системы управления, моделирования и симуляции (например, в стандарте HLA — High-Level Architecture).
- Промышленная автоматизация: системы управления производственными процессами (SCADA), где важна интеграция разнородного оборудования.
- Финансовый сектор: системы обработки транзакций, где требуется строгая согласованность данных и поддержка распределённых транзакций (XA).
В России CCM использовалась в проектах, связанных с созданием автоматизированных систем управления для предприятий оборонно-промышленного комплекса, а также в разработке программного обеспечения для ГЛОНАСС.
Критика и ограничения
Несмотря на техническую проработанность, CCM имеет ряд недостатков, которые помешали её широкому распространению:
- Сложность реализации: создание полноценного CCM-контейнера требует значительных усилий. Большинство коммерческих реализаций (например, OpenORB, Mico) были экспериментальными или неполными.
- Низкая производительность: из-за дополнительных слоёв абстракции (контейнер, порты, управление событиями) CCM-приложения работают медленнее, чем нативные CORBA-объекты.
- Отсутствие поддержки со стороны крупных вендоров: Oracle, IBM и Microsoft не включили CCM в свои продукты, предпочтя Java EE и .NET. Это привело к отсутствию коммерческих серверов приложений, поддерживающих CCM.
- Конкуренция с веб-сервисами: появление SOAP и REST в 2000-х годах сделало CCM менее привлекательной для новых проектов, так как веб-сервисы были проще в использовании и не требовали установки CORBA-инфраструктуры.
- Сложность миграции: переход с объектной модели CORBA на CCM требует переписывания существующего кода, что не всегда оправдано.
Интересные факты
- CCM была одной из первых попыток создать платформонезависимую компонентную модель, предшествовавшую таким стандартам, как SCA (Service Component Architecture) и OSGi.
- В спецификации CCM предусмотрена поддержка асинхронных вызовов через механизм событий, что делает её подходящей для систем реального времени.
- Несмотря на низкую популярность, CCM до сих пор используется в некоторых legacy-системах, особенно в оборонной и аэрокосмической промышленности США и Европы.
- В России существовала собственная реализация CCM — проект CORBA++ (разработчик — компания «Инфосистемы Джет»), которая использовалась в системах управления для РЖД и «Газпрома».
Источники
- Object Management Group. «CORBA Component Model Specification, Version 3.0.1» (2002).
- Henning, M., Vinoski, S. «Advanced CORBA Programming with C++» (1999).
- OMG. «Deployment and Configuration of Component-based Distributed Applications Specification» (2006).
- Документация по проекту OpenORB (SourceForge).
- Статья «CORBA Component Model: A Review» в журнале «IEEE Distributed Systems Online» (2003).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →