на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Технология CORBA

Технология CORBA

Лабораторная работа:

Технология CORBA

Пример 1. Тестирование CORBA-соединения клиента с сервером

Рассмотрим создание примитивной клиент/серверной ИС, состоящей из:

· CORBA-сервера, приветствующего обратившегося к нему CORBA-клиента;

· CORBA-клиента, способного подключаться к CORBA-серверу.

Построение CORBA-сервера

Для построения CORBA-сервера нужно запустить мастера CORBA Server командой File | New | Other | Multitier | CORBA Server (рис. 1).

Рисунок 1

Когда мастер создания сервера запущен, он ожидает от программиста некоторой дополнительной информации (рис. 2):

1. Какого рода CORBA-сервер следует создать: консольное приложение (опция Console Application) или оконное (Window Application)? Не лишне напомнить, что сервер CORBA - это программа, производящая экземпляры объектов и уведомляющая об этом все заинтересованные программы-клиенты.

Рисунок 2

2. Имена IDL-файлов с описанием интерфейсов объектов (кнопка Add) либо, если отметить кнопку Add New IDL File, мастер сам создаст пустой IDL-файл и добавит его в проект.

После нажатия кнопки OK генерируется новый проект, и в окне редактора открывается пустой IDL-файл.

Следующим действием разработчика будет описание интерфейса объекта калькулятора на языке IDL (рис. 5.3).

Рисунок 3

Сохраним полученное описание в файле с именем User.idl.

Теперь можно создать интерфейс пользователя, как показано на рис. 4.

Рисунок 4

В элемент управления Memo1 будет заноситься строка приветствия подключившегося к CORBA-серверу клиента.

Сохраним проект под именем CORBAServerProject.

Для создания импортируемого сервером объекта выполним команду File | New | Other | Multitier | CORBA Object Implementation для запуска соответствующего мастера (рис. 5).

Рисунок 5

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

.

Рисунок 6

В поле Interface Name следует выбрать из выпадающего списка имя интерфейса User::Welcome; это приведет к автоматическому заполнению имени класса объекта и модуля, которые будут сгенерированы мастером CORBA Object Implementation. Имя самого объекта WelcomeObject проставляется в поле Object Names. В самом низу диалоговой панели в левой ее стороне находится кнопка Show Updates. Со включенной кнопкой Show Updates программист получает возможность видеть все изменения в проекте, происходящие при генерации новых файлов и автоматической модификации уже имеющихся исходных текстов. После нажатия на кнопку Ok появляется окно (рис. 7), в котором слева отображается список всех произошедших во время работы мастера действий, тогда как в правой панели находятся исходные тексты, являющиеся результатом подобных действий.

Рисунок 7

Эта панель - полноценный редактор, в котором можно тут же внести изменения. Если то или иное действие мастера программиста не устраивает, он может просто отключить кнопку напротив его названия в левой панели. И действие будет отменено. Создавая калькулятор, нужно найти действие с именем WelcomeImpl::Hello (в левой панели), переключиться на него и внутрь пока еще пустого (в правой панели) метода Hello внести код приветствия. Заметим, что для успешной компиляции этого кода в модуль нужно добавить заголовочный файл формы #include "CORBAServerUnit.h", а ссылку extern TForm1 *Form1;.

Осталось построить проект (рис. 8).

Рисунок 8

CORBAServerProject.cpp

#include <vcl.h>

#pragma hdrstop

//---------------------------------------------------------------------------

#include "WelcomeServer.h"

#include <corba.h>

USEFORM("CORBAServerUnit.cpp", Form1);

//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

// Initialize the ORB and BOA

CORBA::ORB_var orb = CORBA::ORB_init(__argc, __argv);

CORBA::BOA_var boa = orb->BOA_init(__argc, __argv);

WelcomeImpl welcome_WelcomeObject("WelcomeObject");

boa->obj_is_ready(&welcome_WelcomeObject);

Application->CreateForm(__classid(TForm1), &Form1);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

catch (...)

{

try

{

throw Exception("");

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

}

return 0;

}

WelcomeServer.cpp

#pragma hdrstop

#include <corba.h>

#include "WelcomeServer.h"

#include "CORBAServerUnit.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

extern TForm1 *Form1;

WelcomeImpl::WelcomeImpl(const char *object_name):

_sk_User::_sk_Welcome(object_name)

{

}

void WelcomeImpl::Hello()

{

Form1->Memo1->Lines->Add ("Hello, client!");

}

Интересной особенностью CORBA-мастеров C++ Builder является их умение синхронизировать изменения в описании объектной модели с генерируемыми исходными текстами. Каждый раз, когда программист модифицирует IDL-файл, среда разработки исправляет заглушки (stubs) и скелеты (skeletons) приложения, а также переделывает объект.

Построение CORBA-клиента

Действия, необходимые для проектирования клиентского приложения, обращающегося к серверу, также не сложны.

Для построения CORBA-клиента нужно запустить мастера CORBA Client командой File | New | Other | Multitier | CORBA Server (рис. 5.9).

Рисунок 9

В появившемся диалоговом окне (рис. 5.10) нужно выбрать тип приложения и ввести имя IDL-файла user.idl, описывающего объект, к которому будет обращаться CORBA-клиент (можно и не указывать этого имени, а просто добавить IDL-файл в проект).

Рисунок 10

Далее нужно спроектировать несложный интерфейс пользователя, позволяющий соединяться с CORBA-сервером (рис. 11).

Рисунок 11

#include <vcl.h>

#pragma hdrstop

#include "CORBAClientUnit.h"

#include "user_c.hh" // !!!

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

//---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button1Click(TObject *Sender)

{

User::Welcome_var H = User::Welcome::_bind("WelcomeObject");

H->Hello();

}

В обработчике нажатия на кнопку «Подключение к CORBA-серверу» помещают исходный текст, производящий вызов метода Hello() удаленного объекта WelcomeObject интерфейса Welcome модуля User.

Тестирование ИС

Для тестирования ИС следует активизировать утилиту Smart Agent из меню Tools (это программа c:\Inprise\vbroker\bin\osagent.exe) (рис. 12).

Рисунок 12

и последовательно (вне среды C++ Builder) запустить CORBA-сервер и CORBA-клиент

Пример 2. Создание многоуровневой ИС

Рассмотрим пример создания многоуровневой ИС, в которой клиент из банкомата может обратиться к серверу банка и выполнить нужные ему операции (рис. 15).

Рисунок 15

Для ускорения обработки данных серверы банков реализованы в разных каналах.

Пример следует рассмотреть самостоятельно, руководствуясь комментариями к нижеприведенному коду программы.

Xaction.idl

enum EnumAction {

balance,

withdraw,

deposit

};

enum EnumStatus {

OK,

invalid,

complete,

incomplete

};

struct xaction {

long UserID;

long PIN;

long account;

double amount;

::EnumAction action;

double balance;

::EnumStatus status;

};

interface Server {

exception NoServer {

string message;

};

::xaction HandleTransaction(

inout ::xaction Transaction

);

/* raises(

::Server::NoServer

);

*/

long Balance();

};

banking.idl

#include "xaction.idl"

interface BankServer {

::xaction HandleTransaction(

inout ::xaction Transaction

);

long BankID();

};

module Bank {

interface Account {

float balance();

};

interface AccountManager {

::Bank::Account open(

in string name

);

};

Страницы: 1, 2, 3, 4



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.