Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.236.86.184] |
|
Сообщ.
#1
,
|
|
|
Пример создания сервера и клиента CORBA В прежних версиях Delphi поддержка технологии CORBA была тесно объединена с поддержкой технологии COM (на уровне визуальных средств формирования интерфейсов). Это, в частности, выражалось в использовании редактора библиотеки типов, применявшегося преимущественно при описании интерфейсов для COM – объектов. В Delphi 7 включен специальный компилятор IDL2PAS, автоматически генерирующий исходные тексты серверного и клиентского приложения на Паскале на основе описания интерфейса, заданного на языке IDL. Такой подход хорошо тем, что опираться на платформно - независимый язык IDL и даёт возможность создавать распределённые COBRA – приложения на основе шаблонов, подготовленных для других операционных систем. ЗАМЕЧАНИЕ При использование компилятора IDL2PAS в приложении будут использованы новые модули corba.pas и orbpas30.pas/orbpas40.pas вместо старых corbaobj.pas и orbpas.pas . Серверный CORBA – модуль Рассмотрим пример создания CORBA – системы с применением новых возможностей Delphi 7. Эта система реализует функцию сложения двух чисел: Function AddNmb(const X:Integer; const Y:Integer):Integer; Назовём IDL – модуль Server и опишем в нём два интерфейса: IMyTest и MyTestFactory. Первый, основной интерфейс, MyTestFactory, нужен для автоматического создания копии соответствующего объекта при обращении к публикуемому интерфейсу. Этот интерфейс сохраним в файл server.idl Module Server { interface IMyTest; interface IMyTest { long AddNmb (in long X, in long Y); }; interface MyTestFactory { IMyTest Createinstance (in string InstanceName); }; }; Этот компилятор можно также вызвать командой Tools -> Regenerate CORBA IDL files (Инструменты -> Перегенерировать CORBA IDL - файлы). Следующий шаг – генерация на основе описанного выше интерфейса прикладных модулей Delphi, реализующих соответствующую функциональность. Кнопкой Add в диалоговом окне выбирается соответствующий IDL –файл(server.idl), описывающий наш интерфейс, а с помощью переключателей Application Type можно указать вид создаваемого приложения: консольное или Windows(выберем вариант Windows).На вкладке Options задаются дополнительные параметры генерации исходных текстов. Желательно, чтобы были установлены флажки Generate Skeleton Units и Generate Implementation Units, которые соответственно означают Генерировать шаблоны модулей и Генерировать модули реализации интерфейса. После нажатия кнопки OK будут сгенерированы четыре файла на Паскале, названия которых совпадают с названием модуля IDK – файла, описывающего наш интерфейс (Server). Дополнения к названиям полученных файлов (они расположатся в одном каталоге с server.idl) означают следующее: • I – модуль реализации интерфейса; • S – модуль реализации шаблона интерфейса; • C – модуль реализации класса; • Impl – модуль, реализующий функциональность интерфейса. В файле server_impl.pas надо указать, что делает единственный описанный в интерфейсе метод AddNmb: Function TIMyTest.AddNmb(const X:integer; const Y:Integer):Integer; Begin Result :=X+Y; End; В нашем случае текст модуля будет выглядеть так : Unit Unit1; Interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Corba, Server_c, Server_i, Server_s, Server_impl; Type TForm1 – class(TForm) Procedure FormCreate(Sender: TObject); Private {private declarations} Protected { Protected declarations } MTest: IMyTest; // skeleton object Procedure InitCorba; Public {public declarations } end; var Form1 : TForm1; implementation {$R *.DFM} Procedure TForm1.InitCorba; Begin CorbaInitialize; MTest := TIMyTestSkeleton.Create(‘Corba MyTest’,TIMyTest.Create); BOA.ObjIsReady(MTest as _Object); End; Procedure TForm1.FormCreate(Sender: TObject); Begin InitCorba; End; End. Данные приложения можно откомпилировать и запустить. Оно будет представлять собой полноценный CORBA – сервер, реализующий интерфейс IMyTest. Создание клиентского CORBA – приложения Дадим команду File -> New - > Other, на панели CORBA выберем значок CORBAA Client Application. Снова, как и в прошлый раз, с помощью кнопки Add добавим соответствующий IDL – файл с описанием нужного интерфейса и нажмём кнопку OK. Будет автоматически сгенерирован клиентский CORBA – модуль, в котором потребуется дополнительно описать переменную: vIMyTest : IMyTest; Unit Unit2; Interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Corba, Server_c, Server_i, StdCtrls; Type TForm1 – class(TForm) Button1: TButton1; Procedure Button1Click(Sender: TObject); Procedure FormCreate(Sender: TObject); Private {private declarations} Protected { Protected declarations } vIMyTest: IMyTest; // skeleton object Procedure InitCorba; Public {public declarations } end; var Form1 : TForm1; implementation {$R *.DFM} Procedure TForm1.FormCreate(Sender: TObject); Begin vIMyTest := TIMyTestHelper.bind; end; procedure TForm1.Button1Click(Sender: TObject); var n:integer; begin n:=vIMyTest.AddNmb(2,3); ShowMessage(IntToStr(n)); End; End. Тестирование CORBA – проекта Запуск и использование объекта CORBA В реальных проектах сервер CORBA запускается на более мощных компьютерах, чем ПК, на котором расположена клиентская программа CORBA, что позволяет более эффективно обрабатывать запросы. Однако тестовый пример вполне может работать и на локальном компьютере, под управлением Windows 9x. Брокеру всё равно, расположены ли соответствующие объекты на одном компьютере или на ста разных, главное, чтобы они зарегистрировали свои интерфейсы. А как произойдёт регистрация интерфейса только что созданного сервера CORBA ? Автоматически. Хотя технология CORBA предусматривает несколько способов такой регистрации, в том числе и динамический, система Delphi 7 создаёт весь код, необходимый для регистрации заданного интерфейса, без участия человека. Перед запуском серверного модуля на компьютере должен быть запущен «интеллектуальный агент» SmartAgent – ресурс брокера, который автоматически обнаруживает объекты с интерфейсами, нудными клиентским программам. Он вызывается командой Пуск->Программы->VisiBroker->VisiBroker Smart Agent. На экране появляется пустое окно агента. Далее надо запустить с помощью, например, Проводника сервер CORBA (Project1.exe, появится тоже пустое окно) и для проверки его работы две (или пять, или больше) копий клиента CORBA Project2.exe В каждой из клиентских программ можно ввести два числа и мгновенно получить их сумму, щёлкнув на кнопке Button1. При этом суммирование реально выполняется, как уже говорилось, сервером CORBA, а работать он может и на другом компьютере, обрабатывая запросы любого числа клиентов CORBA. Производительность серверного объекта и скорость его ответа на запросы клиентов определяется только ресурсами того компьютера, на котором он запущен. |