Распределенное программирование на базе технологии CORBA.

Упоров Андрей, студент 3 курса Факультета Информационных Технологий НГУ
Новосибирск

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

Содержание:

Краткое введение в технологию

CORBA - наиболее развитая на сегодняшний день объектная технология распределенного программирования (http://www.corba.org/). CORBA позволит Вам создавать распределенные в пространстве Сети компоненты, причем эти компоненты могут быть написаны на различных языках программирования (например, С и Java), работать на различных операционных системах (например, Linux и Windows NT), просто определяя интерфейсы друг друга и удаленно вызывая открытые методы объектов, из которых состоят Ваши компоненты. Стандарт CORBA разрабатывается крупнейшим на планете консорциумом OMG (http://www.omg.org/) и есть достаточно много хороших реализаций стандарта для различных платформ и языков (часть реализаций представляются с открытыми исходными текстами (http://www.opensource.org/), напр. http://www.openorb.org/ (Java), ORBit (C)). CORBA может стать основой для будущей технологии компонентного программирования.

CORBA включает в себя простой язык описания интерфейсов объектов - IDL (Interface Definition Language), что позволяет отделять описания интерфейсов от их реализации и обертывать в CORBA существующие приложения. Также следует сказать, что любой компонент может быть как клиентом, так и сервером одновременно. Можно вызывать методы объектов, расположенных в этой же программе (напр. в параллельном потоке (thread)), в программе на этом же хосте в Сети, на любом хосте или устройстве в Сети (напр. в сотовом телефоне или автомобиле). Вообще, чтобы вызывать методы удаленного объекта, нужно иметь как минимум описание его на IDL и так называемую объектную ссылку на него.

Практически, для создания распределенных компонентов при программировании в CORBA выполняются обычно как минимум следующие шаги:

  1. Проектируются распределенные компоненты
  2. Описываются интерфейсы открытых объектов этих компонентов на языке IDL
  3. Создаются реализации компонентов (объекты и их клиенты)
  4. Тестирование компонентов в распределенной среде
  5. Распределяются компоненты по нужным точкам в Сети

Пример

Для примера рассмотрим процесс создания простого распределенного приложения, такого как небольшая сотовая система: сота и сотовые телефоны (в нашем упрощенном варианте будет работать всего лишь одна сота и ни одной серверной станции сотового оператора) Для работы воспользуемся открытой реализацией CORBA на Java: JavaORB ( JavaORB-2.2.7.tar.gz Объем - 2,167,194) или OpenORB (http://www.openorb.org/). Скачаем архив с бинарными файлами (НЕ с исходными текстами) - например, с помощью броузера.

1. Проектирование компонент

Всегда сначала анализируем задачу, проектируем компоненты, а уж затем реализуем их. В нашем случае задача разделяется (декомпозируется) на два компонента: Сота и Сотовый Телефон. И Сотовый, и Сота будут содержать CORBA-объекты: Сота - Cell, Сотовый - Phone (прим.: Сотовый Телефон будет содержать CORBA-объект Phone для приема сообщений от Соты, т.е. чтобы передать входящее сообщение Сота вызывает методы объекта Phone данного Сотового - это говорит, что у нас система НЕ клиент/сервер, а p2p (peer to peer)).

2. Описание интерфейсов на IDL

Второе, что нам следует сделать: описать интерфейсы наших объектов на языке IDL.

·                        module CellularTelephony {
·                        };
  
·                        module CellularTelephony {
·                               interface CellularSystem {
·                               };
·                 
·                               interface Phone {
·                               };
·                 
·                               interface Cell {
·                               };
·                        };
 
·                        module CellularTelephony {
·                               interface CellularSystem {
·                                       /* EMPTY FOR NOW */
·                               };
·                 
·                               interface Phone {
·                                       void receiveSMS(in string fromnumber, in string shortMessage); // получение сообщения Сотовым от Соты
·                               };
·                 
·                               interface Cell {
·                                       void willUseThisCell(in Phone phone, in string number); // подключение Сотового к Соте
·                                       void sendMessage(in string fromnumber, in string tonumber, in string message); // отправка сообщения на другой Сотовый через Соту
·                               };
·                        };
 

3. Реализация компонентов

Компилируем IDL-описания открытых интерфейсов в код на нужном языке программирования (в нашем случае на Java): команда
  java JavaORB.compiler.IdlCompiler -nopackage -poa CellularTelephony.idl
(возможно, предварительно придется установить путь к архиву с JavaORB:

UNIX: export CLASSPATH=$CLASSPATH:/path/to/JavaORBvX.Y.Z.jar
Windows: set CLASSPATH=%CLASSPATH%;DISK:\path\to\JavaORBvX.Y.Z.jar)

Далее, создадим реализации методов Соты и Сотового.

Создадим саму Соту (читайте комментарии к исходному тексту)

Создадим Сотовый (он для упрощения структуры состоит из нескольких классов, для интерактивного взаимодействия с пользователем мы воспользуемся командной строкой (которая, кстати и содержит многие CORBA-вызовы объекта Cell)

Скомпилируем все наши Java-файлы:
  javac CellularTelephony/*.java *.java

4. Тестирование компонентов в распределенной среде

Все компоненты необходимо протестировать (тестируем по методу черного ящика):

Запустим Соту:
  java EricssonCell

В других окнах запустим по Сотовому:
  java AlcatelPhone number1
  java AlcatelPhone number2

Наберите в командных строках Сотовых команду 'help' и попробуйте послать сообщение от отдного сотового к другому:
  > sendSMS number1 Hello!

5. Распределение компонентов по Сети

Вообще, существует целая гамма средств для распространения компонентов по Сети: FTP, HTTP, CD, другие. В нашем случае, компонент Сота вшивается в мини-компьютер на Соте, компонент Сотовый Телефон программируется в сотовый телефон соответствующими средствами. А если учитывать упрощенность нашего примера, все компоненты будут располагаться на самом деле в одном каталоге (так как объектные ссылки телефоны получают через этот каталог, т.е. если реализовать механизм получения объектных ссылок другим способом, например через сокеты, то можно будет по настоящему распределить по Сети нашу доморощенную сотовую систему

Назад