Добавлен: 01.04.2023
Просмотров: 126
Скачиваний: 2
Введение
архитектура объектный запрос база данные
CORBA (Common Object Request Broker Architecture) - общая архитектура брокера объектных запросов.
Это стандарт, набор спецификаций для промежуточного программного обеспечения объектного типа, образующийся в результате самого широкого анализа аккумулированных реальных проблем, где принимают участие разработчики и потребители технологий. По итогам данного обсуждения формируется документ, предлагающий решение исследуемых вопросов на базе присутствующих технологий и технологий ближайшей перспективы. Преимуществом опережающей разработки спецификации по сравнению с реализацией является возможность для независимых разработчиков формировать потенциально совместимые продукты, не ограничивая свободы выбора языков, операционных систем, аппаратных платформ, и не диктуя выбора определенного технологического решения.
Под термином CORBA подразумевается именно сложная и развитая концепция, образованная на уровне специального языка описаний – IDL. Реализации данной концепции способны значительно отличаться между собой по разнообразным признакам, значимых в той или иной ситуации. VisiBroker и Application Server, BEA WebLogic, Iona Orbix, Oracle Application Server и "картриджи" Oracle, IBM BOSS – данные продукты применяют какие-либо возможности CORBA.
Под "стандартом" применительно к CORBA подразумевается то, что официально утверждено консорциумом OMG. Необходимо отметить, что это крайне высокий уровень "легитимности", поскольку авторитет OMG в компьютерном мире очень высок. OMG является некоммерческой организацией, представляющую собой содружество разработчиков программного обеспечения и его потребителей, объединивших собственные усилия для разработки спецификаций данной технологии. Сейчас в OMG входят более 800 членов.
Объекты CORBA целесообразно рассматривать как экземпляры (instances) определенного метатипа, причем и метатип, и сами объекты существуют вне связи с конкретной программой на конкретном языке. Этот метатип в CORBA называется «интерфейсом».
В настоящее время целесообразно говорить о том, что распределенные объектные технологии способны явиться эффективным средством построения распределенных информационных систем. Их эффективное применение способно значительно уменьшить риск, касающийся провалов проектов разработки таких систем, облегчить стадии интеграции и сопровождения систем. Ввиду этого актуальным является рассмотрение такой прогрессивной технологии в настоящее время, как CORBA.
Цель курсовой работы заключается в рассмотрении технологии CORBA.
Для реализации цели необходимо выполнить ряд задач, а именно:
- рассмотреть теоретические аспекты функционирования технологии CORBA;
- проанализировать практическую реализацию объектного адаптера.
Предметом исследования данной курсовой работы являются распределенные системы обработки информации.
Объектом исследования данной курсовой работы является технология CORBA.
Структура данной курсовой работы состоит из
1 Теоретические аспекты функционирования технологии CORBA
1.1 Описание технологии
Спецификация CORBA создана группой компаний Object Management Group и описывает базирующийся на объектах метод разработки распределенных приложений, т.е. как реализуется взаимодействие объектов клиента и сервера. После инсталляции специального программного обеспечения (далее – ПО) сервер приложений и клиенты способны взаимодействовать, применяя объекты и интерфейсы CORBA.
Программное ядро CORBA создано для ключевых аппаратных и программных платформ. Объекты приложений CORBA, применяя в роли посредника ПО CORBA, взаимодействуют с прочими объектами CORBA, применяя для этого интерфейсы. Для поиска и организации взаимодействия объектов CORBA разработано специальное ПО — объектный брокер запросов и сетевой агент Smart Agent. В результате клиентские и серверные приложения CORBA, функционирующие на базе Wintel, с равной степенью легкости взаимодействуют с похожими приложениями CORBA, откомпилированными для ОС UNIX или AS400.
Соответственно, применение архитектуры CORBA дает возможность разработчикам многоуровневых приложений в Delphi образовывать действительно гетерогенные системы, применяя достоинства каждой платформы.
Основой архитектуры CORBA является объектный брокер запросов VisiBroker for C++ ORB V 3.3.2, управляющий взаимодействием клиентов и серверов в распределенной сетевой среде. Взаимодействие со средой и приложениями Delphi реализует дополнительная библиотека orbpas50.dll.
Помимо ORB существует набор программных средств, реализующих эффективное функционирование приложений CORBA, которые разрабатываются в Delphi:
- Basic Object Adaptor (BOA) — служба, реализующая регистрацию приложения-сервера в распределенной сетевой среде;
- Smart Agent — распределенная служба, реализующие представление данных о функционирующих в сетевой среде серверах CORBA;
- Object Activation Daemon (OAD) — специальное ПО, реализующее автоматический запуск сервера CORBA (если он еще не запущен) при обращении к нему клиента CORBA.
1.2 Интерфейс CORBA
Интерфейс в CORBA – это логически сгруппированное сочетание методов и атрибутов. Каждому интерфейсу дается имя, уникальное в пределах одной распределенной системы. В отличие от СОМ в CORBA нет бинарного стандарта интерфейсов, а есть стандартный язык описаний IDL. Так сложилось, что языки с названием IDL есть в трех разных технологиях – OSF/DCE, Microsoft/COM и OMG/CORBA. Данные языки достаточно схожи, т.к. цель их создания эквивалентна, но OMG/IDL немного отличается от своих «однофамильцев».
Для применения CORBA-объекта в определенной программе недостаточно создать его или даже установить с ним связь. Функциональность CORBA-объекта недоступна для клиента до того момента, пока в программе не появится объект, дающий возможность получить доступ к методам, обозначенным в IDL-интерфейсе. Данный объект (реализованный на C++, Java, C, Cobol, Ada, Smalltalk или пр.) именуется «сервантом».
Исходя из применяемого языка программирования, серванты реализуются различным образом. Для объектно-ориентированных языков сервант является экземпляром (instance) определенного класса, методы которого обеспечивают необходимую функциональность. Подобный класс нередко именуется «классом реализации».
В процессе существования CORBA-объекта с ним может быть сравнено немало разнообразных реализаций сервантов (но максимум один за раз). Помимо всего прочего, они способы включаться в разное адресное пространство различных приложений. Подобные приложения могут быть даже запущены на разных компьютерах.
По своей сути сервант является «инкарнацией» CORBA-объекта. Связь между сервантами и CORBA-объектами является хотя и строго формализованной, но очень гибкой. Сервант может быть образован раньше или позже CORBA-объекта; один сервант способен «обслуживать» как один, так и несколько CORBA-объектов. Явное разделение циклов жизни CORBA-объектов и их сервантов (а именно серванты потребляют реальные ресурсы) – один из столпов, на которых основана высокая масштабируемость CORBA-приложений.
Помимо всего прочего, интерес в технологии CORBA представляет объектная ссылка.
В понимании касательно этой технологии, объектная ссылка является закодированной информацией о CORBA-объекте. Она включает имя хоста, порта TCP/IP, уникальный идентификатор данного CORBA-объекта и немало прочих данных, дающих возможность клиенту зафиксировать связь с серверным объектом через границы языков программирования, ОС и аппаратных платформ. Операции с объектной ссылкой невозможны для клиента, кроме того, что клиент способен превратить ее в строку и записать в файл или базу данных. В дальнейшем любой пользователь способен считать данную строку и трансформировать ее снова в объектную ссылку.
Во втором случае объектная ссылка – это переменная какого-либо языка программирования, с чьей помощью клиент реализует вызов удаленных методов.
Концептуально переменная типа «объектная ссылка» является указателем на «proxy-объект», присутствующий на стороне клиента и реализующий осуществление удаленных вызовов. Сам proxy-объект недоступен для программиста; это связано с тем, что его создание – задача не клиентского приложения, а самого ORB. Логически с каждым proxy-объектом сопоставлена отдельная объектная ссылка, и под копированием объектной ссылки понимается образование как нового proxy-объекта, так и настроенного на него нового «указателя». Естественно, в реальных реализациях физического копирования proxy-объекта не осуществляется в такой ситуации применяется механизм счетчика ссылок.
Необходимо помнить, что копирование (или уничтожение) объектных ссылок на стороне клиента воздействует только на клиентское приложение. Ошибочное ведение счетчика ссылок ведет к продолжению физического существования в клиентском приложении лишнего proxy-объекта. Никакого отношения к серверному объекту данные действия не имеют. И создание, и уничтожение сервантов или серверных CORBA-объектов – задача серверного приложения. Философия CORBA заключается в том, чтобы клиент посылал сообщения «установить связь с существующим объектом» и «разорвать с ним связь», а не «создать серверный объект» и «уничтожить его». Вместе с тем клиент способен инициировать создание Corba-объектов, вызвав у удаленного объекта специально предусмотренный для этого программистом (автором объекта) метод.
1.3 Создание простейшего объекта и его использование
В данном подразделе целесообразно отразить пример применения технологии CORBA.
Сервер образует объект, выполняющий операцию сложения двух целых чисел. Клиент фиксирует связь с серверным объектом, а далее вызывает этот его единственный метод, отражая результаты на мониторе. В данном случае применяется язык C++.
Первый этап разработки CORBA-приложения – написание всех соответствующих IDL-деклараций. В рассматриваемом примере IDL-код может выглядеть так:
interface MyInterface {
long Summa (in long op1, in long op2);
};
Второй шаг – это создание файлов на стороне клиента и сервера при помощи компилятора idl2cpp. В качестве входа компилятор получает список idl-файлов. Это единственный файл, включающий вышеуказанное описание. Для файла с именем, например, SimpleIDL.idl будут созданы файлы SimpleIDL_c.hh, SimpleIDL_c.cpp (для применения на стороне клиента) и SimpleIDL_s.hh, SimpleIDL_s.cpp.
Далее рассмотрим процесс разработки серверного приложения.
Файлы _s.* включают код, дающий возможность связать серверное приложение с CORBA. Наиболее всего интересен сгенерированный класс POA_MyInterface. Он включает объявление чисто виртуальной (абстрактной) функции Summa:
class POA_MyInterface : ...
{
public:
...
virtual CORBA::Long Summa(CORBA::Long _op1,
CORBA::Long _op2)
throw(CORBA::SystemException) = 0;
...
};
Т.к. класс POA_MyInterface представляет собой лишь основу для серверного приложения, его нередко именуют «скелетом» или даже «скелетоном» (skeleton).
Программисту нужно разработать производный от него класс, где функция Summa была бы определена. Это реализуется, например, так:
class MyInterfaceImpl : public POA_MyInterface
{
public:
MyInterfaceImpl () {}
CORBA::Long Summa(CORBA::Long _op1,
CORBA::Long _op2)
throw(CORBA::SystemException);
};
CORBA::Long MyInterfaceImpl::Summa(CORBA::Long _op1,
CORBA::Long _op2)
throw(CORBA::SystemException)
{
return _op1 + _op2;
}
Класс реализаций MyInterfaceImpl нередко образуется автоматически, например, с помощью экспертов, включенных в состав Borland C++ Builder или Java Builder.
Далее необходимо написать код функции main():
#include <fstream.h>
#include <corba.h>
#include "MyInterfaceImpl.h"
#pragma argsused
main(int argc, char* argv[])
{
try
{
// Инициализация взаимодействия с CORBA
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
// Создание серванта будущего CORBA-объекта
MyInterfaceImpl* servant = new MyInterfaceImpl;
// Создание временного (transient)
// CORBA-объекта и получение объектной ссылки
CORBA::Object_ptr oRef = servant->_this();
// Преобразование объектной ссылки в строку
CORBA::String_var str = orb->object_to_string (oRef);
// Запись в файл
ofstream oref_file ("MyORef.ior");
oref_file.write (str, strlen(str)+1);
oref_file.close();
cout << "Waiting for client requests...";
// Цикл ожидания запросов клиентов
orb->run();
}
catch(const CORBA::Exception& e)
{
cerr << e << endl;
return(1);
}
return 0;
}
Далее целесообразно установить определенные пояснения.
Разработка серверного объекта при помощи метода _this() используется нечасто. Создаваемый подобным образом объект обладает комплексом параметров, осложняющих его эффективное использование.
Результатом вызова метода _this() является объектная ссылка. Тип MyInterface устанавливает proxy-объект, MyInterface_ptr (или MyInterface_var) – указатель на него. Это первый вид объектной ссылки – на уровне приложения.
Вторая объектная ссылка – ссылка уровня ORB – образуется в результате ее преобразования к строке с последующей записью данной строки в файл.
Объектная ссылка пишется в файл, откуда ее способно считать приложение-клиент. Данный способ скорее отражает принцип организации связи между клиентом и сервером, чем представляет какую-либо практическую ценность.