Файл: Технология CORBA (Описание и архитектура CORBA).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 03.04.2023

Просмотров: 177

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ВВЕДЕНИЕ

архитектура объектный запрос база данные

Технология CORBA, разрабатываемая с 1989 года консорциумом OMG (Object Management Group), является результатом работы ведущих специалисто. Четкий процесс стандартизации, включая аспекты взаимодействия реализаций CORBA от разных поставщиков (интероперабельность), независимость от языков программирования и операционных сред, фундаментальная поддержка ООП и многие другие уникальные характеристики, сделали CORBA ведущим стандартом в области инфраструктурного middleware. 

Распределенная система, использующая CORBA, не ориентирована на применение конкретных операционных систем, двоичных стандартов, сетевых протоколов и языков программирования. Фактически, это единственная технология, которая обеспечивает возможность использования практически любых языков программирования и функционирование программного обеспечения практически на любых аппаратно-программных платформах.

Цель курсовой работы является теоретическое, и практическое изучение технологии CORBA.

Для реализации цели необходимо выполнить ряд задач:

  1. Рассмотреть архитектуру комплекса CORBA;
  2. Охарактеризовать языки программирования, используемые при разработке на базе CORBA;
  3. Рассмотреть практические аспекты использования построения системы технологии CORBA для решения стандартных системных задач.

Предметом исследования данной курсовой работы являются практические аспекты использования построения системы технологии CORBA.

Объектом исследования данной курсовой работы является технология CORBA.

Структура данной курсовой работы состоит из введения, двух глав, заключения, списка использованных источников.

1 Теоретические аспекты функционирования технологии CORBA

1.1 1Описание и архитектура CORBA

Архитектура Common Object Request Broker (CORBA) - это стандарт, разработанный Группой управления объектами (OMG) для обеспечения взаимодействия между распределенными объектами. CORBA - это ведущее в мире промежуточное программное обеспечение, позволяющее обмениваться информацией независимо от аппаратных платформ, языков программирования и операционных систем. CORBA - это, по сути, спецификация проекта для Object Request Broker (ORB), где ORB предоставляет механизм, необходимый для взаимодействия распределенных объектов друг с другом, локально или на удаленных устройствах, написанных на разных языках или в разных местах в сети [2].


Язык определения интерфейса CORBA, или IDL, позволяет разрабатывать независимые от языка и местоположения интерфейсы для распределенных объектов. Используя CORBA, компоненты приложения могут взаимодействовать друг с другом независимо от того, где они находятся или кто их спроектировал. CORBA обеспечивает прозрачность местоположения, чтобы иметь возможность выполнять эти приложения.

CORBA часто описывается как «программная шина», потому что это программный интерфейс связи, через который объекты обнаруживаются и доступны. На рисунке ниже показаны основные компоненты, видимые в реализации CORBA.

Рисунок 1 - основные компоненты, видимые в реализации CORBA.

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

 С помощью этой объектно-ориентированной технологии разработчики могут воспользоваться такими функциями, как наследование, инкапсуляция, полиморфизм и динамическое связывание во время выполнения. 

Эти функции позволяют изменять, модифицировать и повторно использовать приложения с минимальными изменениями в родительском интерфейсе. На рисунке 2 ниже показано, как клиент отправляет запрос на сервер через ORB.

Рисунок 2- Отправка клиенту запроса на сервер через ORB

Таким образом, из вышесказанного следует, что данные функции позволяют изменять, модифицировать и повторно использовать приложения с минимальными изменениями в родительском интерфейсе. 

1.2 Языки программирования, используемые при разработке на базе CORBA

Краеугольным камнем стандартов CORBA является язык определения интерфейса. IDL является стандартом OMG для определения API, не зависящих от языка, и обеспечивает независимое от платформы разграничение интерфейсов распределенных объектов. Способность сред CORBA обеспечивать согласованность между клиентами и серверами в гетерогенных средах начинается со стандартизованного определения данных и операций, составляющих интерфейс клиент-сервер. Этот механизм стандартизации является IDL и используется CORBA для описания интерфейсов объектов.


IDL определяет модули, интерфейсы и операции для приложений и не считается языком программирования. Различные языки программирования, такие как Ada, C ++ или Java, обеспечивают реализацию интерфейса через стандартизированные сопоставления IDL. Использование архитектуры CORBA реализуется с помощью описаний методов, которые доступны в объекте, на языке определения интерфейсов IDL.

В настоящий момент стандартизовано отображение языка IDL на шесть языков программирования — Ada, C, C++, Cobol, Java и Smalltalk. За основу IDL взят язык C++. Следующая таблица показывает соответствие основных концепций языков JAVA и C++ с языком IDL.

Таблица 1

Соответствие основных концепций языков JAVA и C++ с языком IDL

IDL

Java

C++

Module

Package

Namespace

Method

Public Interface

Pure abstract class

Method

Method

Member function

В модуле IDL представлены предоставляемые объектам услуги, реализации которых производятся потом на любом языке, поддерживаемом CORBA. Из таблицы 1 мы видим, что что модуль, также как и package в Java и namespace и С++, определяет собственное пространство имен[ 11, с.56].

Дальнейшее изложение будет посвящено последним двум конструкциям, интерфейсам и типам-значениям. Полное описание всех конструкций языка IDL можно найти в спецификации [2] и в руководстве [11, c. 81–132].

1.3 Интерфейсы

Взаимодействие с удаленным объектом в CORBA возможно двумя способами. Первый способ — получение объектной ссылки на него. Объектную ссылку проще всего трактовать, как обобщение понятия указателя в С++ или ссылки в Java.

Для того чтобы определить объект, достаточно определить интерфейс. Создавая таким образом CORBA-объект, одновременно создается и объектная ссылка на него.

При вызове удаленного метода объекта передается объектная ссылка, и говорят по аналогии с С++, что «объект передается по ссылке».

Другой способ взаимодействия с удаленным объектом использует «передачу по значению».

Суть заключается в следующем: при вызове удаленных методов в качестве аргумента передается не объектная ссылка (т.е. указатель на объект), а копия состояния этого объекта. В общем случае подразумевается, что клиент знает все о методах объекта, состояние которого он получил. Это достигается использованием доступной для клиента, базы данных интерфейсов вместе со всеми их характеристиками.


Эти базы данных называются репозитариями интерфейсов (Interface Repository) [6].

Созданные таким способом объекты, могут продолжать существовать после завершения создавших их процессов. При реализации этого способа на Java возможна передача не только состояния объекта, но и при необходимости байт-кода его класса (подробно о сериализации см. [5]), что и было эффективно проделано в технологии Enterprise JavaBeans Типы-значения (Valuetype) служат для представления вышеизложенного способа взаимодействия. Интерфейсы Интерфейсы определяют новое пространство имен, не могут быть вложенными, но могут быть связаны друг с другом отношениями наследования (как простого, так и множественного).

Также нет возможности на уровне IDL задать интерфейс с состоянием, т.е. создать поля для интерфейсов, хотя CORBA-объект как правило имеет состояние.

Вот пример интерфейса, реализующего большинство его возможностей:

interface MyInterface {

//Определение синонимов типов

typedef string StringArray;

typedef long ResultType;

//Определение исключительных ситуаций

exception Wrong {}

//Определение констант

const string Header = “This is Header”;

//Определение атрибутов

attribute ResultType myQuery;

//Определение методов

string myMethod (in StringArray args) raises (Wrong);

void getTotal (out double i); };

При определении методов для каждого аргумента в списке необходимо указывать его признак — является ли параметр входным (in), выходным (out) или и тем, и другим (inout).

Это служит для явного задания того, кто — клиент или сервер — отвечает за выделение памяти под объекты. Входной параметр (in) передается от клиента серверу, за выделение и освобождение памяти для объекта отвечает клиент.

Выходной параметр (out) передается от сервера клиенту. Инициализаторы (initializers) являются аналогами конструкторов С++ или Java, в них они и отображаются компилятором. Все их аргументы должны иметь входной тип (in). CORBA не обеспечивает в отличие от С++ конструктора по умолчанию. Это означает, что при отсутствии явных инициализаторов (конструкторов, фабрик) невозможно создать экземпляр такого типа-значения при выполнении приложения. Типы-значения такого вида, т.е. те, которые имеют состояние, называются объектами с состоянием (stateful).

Есть абстрактные типы-значения (abstract), которые не содержат ни полей состояния, ни инициализаторов.

Интерфейс в CORBA – это логически сгруппированное сочетание методов и атрибутов. Каждому интерфейсу дается имя, уникальное в пределах одной распределенной системы. В отличие от СОМ в CORBA нет бинарного стандарта интерфейсов, а есть стандартный язык описаний IDL. Так сложилось, что языки с названием IDL есть в трех разных технологиях – OSF/DCE, Microsoft/COM и OMG/CORBA. Данные языки достаточно схожи, т.к. цель их создания эквивалентна, но OMG/IDL немного отличается от своих «однофамильцев».


Функциональность CORBA-объекта недоступна для клиента до того момента, пока в программе не появится объект, дающий возможность получить доступ к методам, обозначенным в IDL-интерфейсе. Данный объект (реализованный на C++, Java, C, Cobol, Ada, Smalltalk или пр.) именуется «сервантом» [1, c.24].

Исходя из применяемого языка программирования, серванты реализуются различным образом. Для объектно-ориентированных языков сервант является экземпляром (instance) определенного класса, методы которого обеспечивают необходимую функциональность. Подобный класс нередко именуется «классом реализации».

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

По своей сути сервант является «инкарнацией» CORBA-объекта. Связь между сервантами и CORBA-объектами является хотя и строго формализованной, но очень гибкой. Сервант может быть образован раньше или позже CORBA-объекта; один сервант способен «обслуживать» как один, так и несколько CORBA-объектов. Явное разделение циклов жизни CORBA-объектов и их сервантов (а именно серванты потребляют реальные ресурсы) – один из столпов, на которых основана высокая масштабируемость CORBA-приложений [1, c.45].

Помимо всего прочего, интерес в технологии CORBA представляет объектная ссылка.

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

Во втором случае объектная ссылка – это переменная какого-либо языка программирования, с чьей помощью клиент реализует вызов удаленных методов.

Концептуально переменная типа «объектная ссылка» является указателем на «proxy-объект», присутствующий на стороне клиента и реализующий осуществление удаленных вызовов. Сам proxy-объект недоступен для программиста; это связано с тем, что его создание – задача не клиентского приложения, а самого ORB. Логически с каждым proxy-объектом сопоставлена отдельная объектная ссылка, и под копированием объектной ссылки понимается образование как нового proxy-объекта, так и настроенного на него нового «указателя». Естественно, в реальных реализациях физического копирования proxy-объекта не осуществляется в такой ситуации применяется механизм счетчика ссылок [1, c.26].