- •Розподілені системи обробки інформації
- •Передмова
- •Розділ 1. Огляд компонентних технологій створення розподілених програмних систем
- •1.1. Узагальнена архітектура і механізм функціонування об'єктних розподілених систем
- •1.2. Основні приклади технологій створення розподілених систем
- •1.3. Переваги використання розподілених технологій
- •Розділ 2. Розроблення розподілених систем на основі модели com/dcom у Delphi
- •2.1. Використання dll у Delphi
- •2.1.1. Поняття dll
- •2.1.2. Створення dll у середовищі Delphi (експорт)
- •2.1.3. Використання dll у Delphi (імпорт)
- •2.1.4. Створення динамічних бібліотек для редагування ресурсів
- •2.2. Основи сом-технології
- •2.2.1. Загальний опис
- •2.2.2. Базові поняття
- •2.2.3. Бібліотека сом
- •2.2.4. Бібліотека типів
- •2.3.2. Сервер сом у Delphi
- •2.3.3. Бібліотека типів у delphі
- •2.4. Створення системи клієнт-сервер на основі базового com-об’єкту у складі внутрішнього сервера
- •2.4.1. Створення сом-сервера
- •2.4.2. Створення сом-клієнта
- •2.4.3. Використання сом-об’єкту в клієнтській програмі
- •2.5. Механізм міжпроцесного обміну
- •2.6. Створення систем клієнт-сервер на основі зовнішнього базового сом-об’єкту
- •2.6.1. Основні поняття
- •2.6.2. Засоби організації потокової взаємодії клієнта і сервера
- •2.6.3. Методи формування екземпляра сом-об’єкту
- •2.6.4. Формування екземпляра зовнішнього сом-об’єкту
- •2.6.5. Створення сом-сервера
- •2.6.6. Створення сом-клієнта
- •2.7. Автоматизація
- •Створення сервера автоматизації;
- •2.7.1. Базові поняття
- •2.7.2. Сервер автоматизації
- •2.7.3. Контролер автоматизації
- •2.8. Створення системи клієнт-сервер на основі внутрішнього сервера автоматизації
- •2.8.1. Об'єкт автоматизації. Клас tAutoObject
- •2.8.2. Вбудований сервер автоматизації
- •2.8.3. Створення клієнта автоматизації
- •2.9. Зовнішній сервер автоматизації
- •2.9.1. Основні визначення
- •2.9.2. Виконання маршалінгу з рядками, шрифтами і зображеннями
- •2.9.3. Перетворення наявного застосунка в сом-сервер автоматизації
- •2.9.4. Створення клієнта автоматизації
- •2.10. Події в сом і зворотні виклики на основі інтерфейсів диспетчирування
- •2.10.1. Створення сервера автоматизації
- •3. Формування бібліотеки типів
- •4. Формування методів
- •5. Реєстрація сервера
- •2.10.2. Створення клієнтського застосунка
- •2.10.3. Підключення множини клієнтів до сервера
- •2.11. Інтерфейси зі зворотним викликом
- •2.11.1. Створення сервера
- •2.11.2. Створення клієнтського застосунка
- •2.12. Технологія ActiveХ
- •2.12.1. Використання готових елементів АctiveХ
- •2.12.2. Розроблення власних елементів АctiveХ
- •2.12.3. Поширення елементів керування ActiveХ і форм ActiveХForm у Web-середовище
- •2.14. Dcom технологія
- •2.14.1. Загальна схема взаємодії сом-клієнта і сом-сервера
- •2.14.2. Розроблення системи «клієнт-віддалений сом-сервер»
- •Розділ 3. Проектування розподілених систем на платформі Microsoft .Net
- •3.1.1. Здійсненя викликань з типів .Net до типів сом
- •3.1.2. Звернення клієнта сом до збірки .Net
- •3.2. Об’єктно-орієнтована архітектура .Net Remotіng – основа створення розподілених систем Mіcrosoft .Net.
- •3.2.1. Створення системи клієнт-сервер на основі технології Remoting
- •Розділ 4. Створення системи "клієнт - сервер" на основі технології corba
- •4.1. Загальні теоретичні відомості
- •4.2. Створення серверного застосунка
- •1. Створення файла опису інтерфейсу
- •Викликання конструктора створення corba сервера
- •Формуємо модуль Unit1
- •Формуємо реалізацію методу
- •4.3. Створення клієнтського застосунка
- •Викликання конструктора corba-клієнта
- •2. Формування форми
- •3. Запуск застосунка
- •Приклад програмних кодів сервера
- •4.4. Порівняльний аналіз технологій сом і соrва
- •4.4.1. Основні принципи об'єктних моделей
- •4.4.2. Об'єктні моделі
- •4.4.3. Підтримка операційних систем
- •4.4.4. Формальний опис архітектури і проблеми реалізації
- •4.4.5. Підсумки порівняння
- •Літературні джерела
2. Формування форми
На головній формі проекту розміщуємо Editl, Buttonl, Button2.
У модулі Unit1 оголошуємо змінну STRServ типу SimpleCorbaInt. До автоматично створеного шаблону методу InitCorba додаємо наступний код:
procedure TForm1.InitCorba;
begin
CorbaInitialize;
// Bind to the Corba server like this
// Acct := TAccountHelper.bind;
STRServ:=TSimplCORBAIntHelper.Bind();
end;
Цей код виконує з'єднання з CORBA-сервером і одержання вказівника на інтерфейс SimpleCorbaInt Corba-об’єкту.
В оброблювачі події OnClick кнопки Button1 головної форми викликаємо метод InitCorba для зв'язку з CORBA.
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.InitCorba;
end;
Для виклику методу інтерфейсу в оброблювачі події OnClick Button2 пишемо наступне:
procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption := STRServ.getstr(Edit1.text);
end;
У лістингу наведено фрагменти коду клієнтського застосунка:
//Модуль головної форми
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Corba, STRServ_c, STRServ_i, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit; Button1: TButton;
Button2: TButton; Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ private declarations }
protected
//declare your Corba interface variables like this Acct:Account;
STRServ:SimplCORBAInt;
procedure InitCorba; { protected declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.InitCorba;
begin
CorbaInitialize;
//Bind to the Corba server like this Acct:=TAccountHelper.bind;
STRServ:=TSimplCORBAIntHelper.Bind();
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.InitCorba;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption := strServ.getstr(Edit1.text);
end;
end.
3. Запуск застосунка
-
Для запуску застосунка необхідно на машині сервера і на машині клієнта запустити SmartAgent.
-
Запустити сам сервер.
-
Запустити клієнт.
Приклад програмних кодів сервера
//модуль головної форми
unit Unit1;
interface
uses
Windows, Messages, . . .,STRServ_s, Corba, STRServ_c, STRServ_i, STRServ_impl;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
protected
{ protected declarations }
//Add Corba interface variables here like this Acct:Account; skeleton object
// STRServ:SimplCORBAInt;
procedure InitCorba;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.InitCorba;
begin
CorbaInitialize;
// Add CORBA server code here like this
//Acct:=TAccountSkeleton.Create('Jack B Quick',TAccount.Create);
// BOA.ObjIsReady(Acct as _Object);
STRServ:=STRServ_s.TSimplCORBAIntSkeleton.Create('My str server',TSimplCorbaInt.Create);
BOA.ObjIsReady(STRServ as _Object);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.InitCorba;
end;
end.
//модуль реалізації інтерфейсу
unit STRServ_impl;
{D:\Program Files\Borland\Delphi7\Projects\ CORBA_GETSTR\ STRServ.idl. }
{Delphi Pascal unit : STRServ_impl }
{derived from IDL module : default }
interface
uses
SysUtils, CORBA, STRServ_i, STRServ_c;
type
TSimplCORBAInt = class;
TSimplCORBAInt = class(TInterfacedObject, STRServ_i.SimplCORBAInt)
protected {*** User variables go here ***}
public
constructor Create;
function getstr (const instr : AnsiString): AnsiString;
end;
implementation
constructor TSimplCORBAInt.Create;
begin
inherited Create;
{ *** User code goes here *** }
end;
function TSimplCORBAInt.getstr (const instr : AnsiString): AnsiString;
begin
{ *** User code goes here *** }
result:= Instr+' + CORBA ADD STR' ;
end;
initialization
end.
//модуль опису інтерфейсу
unit STRServ_i;
{Please do not edit the contents of this file. You should instead edit and }
{recompile the original IDL which was located in the file }
{D:\Program Files\Borland\Delphi7\Projects\ CORBA_GETSTR\ STRServ.idl. }
{Delphi Pascal unit : STRServ_i }
{derived from IDL module : default }
interface
uses
CORBA;
type
SimplCORBAInt = interface;
SimplCORBAInt = interface
['{13BA81BA-B2C1-55DF-3B2B-1189AE4792D8}']
function getstr (const instr : AnsiString): AnsiString;
end;
implementation
initialization
end.