corba n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
CORBA -об'єкти та їх особливості PowerPoint Presentation
Download Presentation
CORBA -об'єкти та їх особливості

Loading in 2 Seconds...

play fullscreen
1 / 30

CORBA -об'єкти та їх особливості - PowerPoint PPT Presentation


  • 165 Views
  • Uploaded on

CORBA -об'єкти та їх особливості. 2003-2007. Зміст. Створення CORBA -об'єктів. Interoperable Object Reference ( IOR ). Репозиторні ідентифікатори ( Repository ID ). CORBA - об'єкти, серванти та їх життєві цикли. Приклади. Установлення зв'язку між клієнтом і серверним CORBA -об'єктом.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'CORBA -об'єкти та їх особливості' - darryl-hopkins


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2
Зміст
  • Створення CORBA-об'єктів. Interoperable Object Reference (IOR).
  • Репозиторні ідентифікатори (Repository ID).
  • CORBA-об'єкти, серванти та їх життєві цикли. Приклади.
  • Установлення зв'язку між клієнтом і серверним CORBA-об'єктом.
    • Стандартні засоби встановлення зв'язку.
    • Використання StringifiedIOR.

CORBA-об'єкти та їх особливості

corba interoperable object reference ior
Створення CORBA-об'єкту – це створення на боці сервера логічного об'єкту (не фізичного, пам'ять безпосередньо під об'єкт не виділяється!) та спеціального (вже фізичного) посилання – інтероперабельного об'єктного посилання – Interoperable Object Reference (IOR).

Саме IOR, при потребі, передається від одного ORB до іншого.

IOR складається з Repository ID (як type_id) та послідовності профілів (profiles), що представляють підтримувані протоколи.

Зокрема, для IIOP (він ґрунтується на використанні TCP/IP) структура профілю містить ім'я хосту, номер порту, ідентифікатор (ключ) об'єкта Object Key.

Object Key у свою чергу містить ім'я адаптера (POA), який створив CORBA-об'єкт, та ObjectID, який ідентифікує CORBA-об'єкт, серед інших, створених адаптером. (Принагідно зауважимо, що у ролі фабрики CORBA-об'єктів виступає об'єктний адаптер POA).

Створення CORBA-об'єктів.Interoperable Object Reference (IOR)

struct IOR {

string type_id; // Repository ID

sequence < TaggedProfile> profiles;

};

CORBA-об'єкти та їх особливості

slide4
Складові частини IOR у випадкупротоколаIIOP, який ґрунтується на TCP/IP:

Repository ID;

Profiles:

Host IP;

Host port;

Object Key;

POA name;

Object ID;

Можлива додаткова інформація.

Складові частини IOR

CORBA-об'єкти та їх особливості

slide5
Репозиторні ідентифікатори (Repository ID) генеруються IDL-компілятором idl2cpp,використовуючи формат OMG IDL. (Загалом, у CORBA використовується ще один формат на основі універсальних унікальних ідентифікаторів Середовища Розподілених Обчислень DCE – Distributed Computing Environment).

Приклад:

module MyModule

{

interface MyInterface

{

long MyMethod()

};

};

Компілятором idl2cpp генеруються для окремих частин такого IDL-визначення наступні репозиторні ідентифікатори:

IDL:MyModule:1.0

IDL:MyModule/MyInterface:1.0

IDL:MyModule/MyInterface/MyMethod:1.0

Репозиторні ідентифікатори

CORBA-об'єкти та їх особливості

slide6
Можна впливати на генерацію окремих складових Repository ID, використовуючи наступні директиви (в IDL-файлі):

#pragma prefix

#pragma ID

#pragma version

Приклад 1. При використанні директиви

#pragma prefix "omg.org”IDL-транслятором будуть генеруватись репозиторні ідентифікатори:

omg.org:MyModule:1.0,

omg.org:MyModule/MyInterface:1.0

omg.org: MyModule/MyInterface/MyMethod:1.0(зауважимо, що omg.org – це реальний префікс з orb.idl)

Приклад 2. При використанні директиви

#pragma MyMethod “KU:Method_KVF:2.0”транслятором для MyMethod буде генеруватись репозиторний ідентифікатор

KU:Method_KVF:2.0

Репозиторні ідентифікатори та їх генерація IDL-компіляторами

CORBA-об'єкти та їх особливості

corba1
СтворенняCORBA-об'єкту – це лише потенційна, але не реальна можливість клієнту скористатись функціональністю CORBA-об'єкта.

Після створення CORBA-об'єкта можна “передати” (і для цього є різні можливості) IOR (IO-посилання) на цей об'єкт клієнтській програмі. Та цього замало для забезпечення реалізації клієнтських викликів.

Щоб можна було скористатись функціональністю CORBA-об'єкта треба мати сервант (servant) цього CORBA-об'єкта.

Сервант – це реальний програмний код, що реалізує експоновану CORBA-об'єктом (інтерфейсом) функціональність.

Найчастіше (але не завжди!) сервант – це програмний об'єкт, який реалізує функціональність CORBA-об'єкта (інтерфейсу). (Borland-”майстрами” за IDL-описом інтерфейсу генерується клас реалізації, на основі якого можуть створюватись об'єкти-серванти).

CORBA-об'єкти та серванти

Створення CORBA-об'єкту – це створення на боці сервера логічного об'єкту (не фізичного, пам'ять безпосередньо під об'єкт не виділяється!) та спеціального (вже фізичного) посилання – інтероперабельного об'єктного посилання – Interoperable Object Reference (IOR).

CORBA-об'єкти та їх особливості

corba2
CORBA-об'єкт та його серванти (їх може бути кілька протягом життєвого циклу CORBA-об'єкту, але не більше одного одночасно) мають

незалежні життєві цикли.

(Зокрема, відзначимо, що CORBA-об'єкти можуть залишатись “живими” навіть після перезапуску серверної програми).

З огляду на наявність у CORBA-об'єкта серванта використовуються терміни "активний" та "неактивний" CORBA-об'єкт. Кажуть також про "активізацію" та "дезактивізацію" CORBA-об'єкта.

Стосовно сервантів застосовуються терміни інкарнація та ефемерізація, коли, відповідно, встановлюється чи втрачається “зв'язок” CORBA-об'єкта з сервантом.

У технології CORBA застосовуються різні механізми активізації CORBA-об'єктів та створення сервантів для CORBA-об'єктів. Зокрема, серванти можуть створюватись динамічно – у момент, коли надходить запит від клієнта, при тому можуть серванти створюватись “під один запит” чи на тривалий час.

CORBA-об'єкти, сервантита їх життєві цикли

CORBA-об'єкти та їх особливості

corba3
PortableServer::ObjectId_var objID1 =

PortableServer::string_to_ObjectId("Ob");

CORBA::Object_var oRef =

myPOA->create_reference_with_id(

objID1,"IDL:sm:1.0");

СтворенняCORBA-об'єктів та сервантів. Приклади

Створення CORBA-об'єкта без серванта

Repository ID

interface sm {

float add(in float a1,in float a2);

};

smImpl servant;

PortableServer::ObjectId_var objID =

PortableServer::string_to_ObjectId ("MyObject");

myPOA->activate_object_with_id (objID, &servant);

Створення активногоCORBA-об'єкта (з сервантом)

Явна активізація CORBA-об'єкта

CORBA-об'єкти та їх особливості

corba4
Варіанти активізації CORBA-об'єктів:

явна активізація;

активізація за вимогою;

неявна активізація;

активізація із сервантом за замовчуванням.

Варіанти активізації CORBA-об'єктів

CORBA-об'єкти та їх особливості

servantactivator
Активізація за вимогою (з використанням ServantActivator). Приклад

Створено CORBA-об'єкт без серванту

Реєстрація менеджера сервантів

Запуск сервера

(USE_SERVANT_MANAGER, RETAIN)

Запуск клієнта

CORBA-об'єкти та їх особливості

servantactivator1
Активізація за вимогою (з використанням ServantActivator). Приклад інкарнації

CORBA-об'єкти та їх особливості

servantactivator2
Активізація за вимогою (з використанням ServantActivator). Ілюстрація до прикладу

Запуск сервера

(USE_SERVANT_MANAGER, RETAIN)

Запуск клієнта

CORBA-об'єкти та їх особливості

slide14
Активізація за вимогою (з використаннямсерванта за замовчуванням).Приклад

Створено два CORBA-об'єкти, обидва “без” сервантів

“Реєстрація” серванта за замовчуванням

Запуск Smart Agent

Запуск сервера

(USE_DEFAULT_SERVANT)

Запуск клієнта

CORBA-об'єкти та їх особливості

slide15
Активізація за вимогою (з використаннямсерванта за замовчуванням).Ілюстрація до прикладу

Запуск Smart Agent

Запуск сервера

(USE_DEFAULT_SERVANT)

Запуск клієнта

CORBA-об'єкти та їх особливості

corba5
Установлення зв'язку між клієнтом і серверним CORBA-об'єктом полягає в отримуванні клієнтом інтероперабельного об'єктного посиланняIOR на цей об'єкт. (IOR – Interoperable Object Reference).

Термінологія CORBA – “клієнт зв'язується (bind) з CORBA-об'єктом сервера”.

Клієнт має отримати посилання IORна CORBA-об'єкт, вважаючи, що той вже існує.

Клієнт ніколи не створює CORBA-об'єкт, а тільки зв'язується з ним.

Установлення зв'язку між клієнтом і серверним CORBA-об'єктом

Створення CORBA-об'єкту – це створення на боці

сервера логічного об'єкту та IOR як реального даного.

CORBA-об'єкти та їх особливості

corba corba
1. Стандартні засобиCORBA, що дозволяють зробити серверний об'єкт доступним для клієнта, тобто, дозволяють отриматиIOR:

Naming Service;

Trader Service;

використання функції string_to_object. Наприклад, функція object_to_string дозволяє з посилання IOR отримати рядок SIOR (StringifiedIOR). Цей рядок можна якимось чином передати клієнту (файл, e-mail, звичайна пошта тощо) та знову перетворити його у посилання IOR., скориставшись уже функцією string_to_object

2. Нестандартний засібVisiBroker – Smart Agent з нестандартної служби Location Service.

Установлення зв'язку між клієнтом і серверним CORBA-об'єктом. Стандартні засобиCORBA

interface ORB { // PIDL

. . .

string object_to_string (in Object obj);

Object string_to_object (in string str); ...}

CORBA-об'єкти та їх особливості

string to object url corba
Три схеми (шаблони) рядків, розрахованих на застосування у string_to_object:

1. IOR-схема (рядок у вигляді “IOR: . . .”).

2. URL-схема corbaloc

corbaloc:[протокол]:[адреса][“/”<Object_Key як частина StringifiedIOR >]

Протоколи:

iiop (за замовчуванням);

rir – для об'єктних посилань, що отримуються при використанні метода resolve_initial_reference.

Приклад: corbaloc::my_server.my_company.com:1050/NameServiceЗа вказаною IP- адресою (хост, порт) має бути програма, яка здатна обробляти Corba-запити та Corba-об'єкт якої має відповідний Object Key.

Функціяstring_to_object. ВикористанняURLу CORBA

interface ORB { // PIDL

. . .

string object_to_string (in Object obj);

Object string_to_object (in string str); ...}

CORBA-об'єкти та їх особливості

url corba string to object
3. URL-схема corbaname:

corbaname: <corbaloc-URL служби іменування COS Naming >#<INS-ім'я>.

Зауважимо, що на відміну від попередньої, можна сказати, універсальної URL-схеми, ця схема розрахована на застосування служби іменування COS Naming.

Приклад:

corbaname::my_server.my_company.com:

1050/NameService#my_context/my_obТут підрядок “/NameService” можна не вказувати (замовчування), оскільки застосування служби іменування у цій схемі є обов'язковим.

Кроки обчислення об'єктного посилання IOR:

за зазначеною адресою (першою частиною corbaname) отримується об'єктне посилання на службу іменування.

за іменем у стилі INS (другою частиною corbaname), використовуючи вже визначену службу іменування, отримується шукане посилання на Corba-об'єкт.

ВикористанняURLу CORBA. Функціяstring_to_object (прод.)

CORBA-об'єкти та їх особливості

bject to string sior stringified ior
Оbject_to_string, SIOR (Stringified IOR).Фрагменти серверного проекта

Створено активний CORBA-об'єкт з сервантом

Запис SIOR у файл

CORBA-об'єкти та їх особливості

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

ifstream inp_file ("MyORef.ior");

inp_file >> str;

inp_file.close();

CORBA::Object_var obj = orb->string_to_object (str);

sm_var objRef = sm::_narrow (obj);

objRef->add(...,...);

IOR:012020200b00000049444c3a736d3a312e30002002000000015349565c000000010102200f00000043505131353833363330323337310020040a0000000000003300000001504d43000000000b00000049444c3a736d3a312e300020090000004d794f626a65637400202020070000002f4d79504f410020000000000000000050000000010102200a0000003132372e302e302e3100c00b3300000001504d43000000000b00000049444c3a736d3a312e300020090000004d794f626a65637400202020070000002f4d79504f41002000000000

Отримання клієнтом IOR на основі файлу із SIOR. Фрагменти клієнтського проекту

Запуск сервера

Запуск клієнта

CORBA-об'єкти та їх особливості

corba sior
Приклади застосування встановлення зв'язку між клієнтом і серверним CORBA-об'єктом із використанням SIOR:

потреба зберегти зв'язок із серверним об'єктом на тривалий час (протягом якого клієнтський процес зупиняється);

потреба зберегти посилання на ключові фабрики об'єктів CORBA (чи псевдооб'єктів) або на ключові об'єкти на зразок служби іменування (Naming Service), Trader-служби;

потреба зберегти посилання на репозиторій інтерфейсів (InterfaceRepository).

Загалом, вважається, що SIOR надає максимально зручний засіб для встановлення зв'язку між клієнтом і серверним CORBA-об'єктом для різних продуктів ORB.

Установлення зв'язку між клієнтом і серверним CORBA-об'єктом із використанням SIOR

CORBA-об'єкти та їх особливості

stringified ior
IOR:012020200b00000049444c3a736d3a312e30002002000000015349565c000000010102200f00000043505131353833363330323337310020040a0000000000003300000001504d43000000000b00000049444c3a736d3a312e300020090000004d794f626a65637400202020070000002f4d79504f410020000000000000000050000000010102200a0000003132372e302e302e3100c00b3300000001504d43000000000b00000049444c3a736d3a312e300020090000004d794f626a65637400202020070000002f4d79504f41002000000000IOR:012020200b00000049444c3a736d3a312e30002002000000015349565c000000010102200f00000043505131353833363330323337310020040a0000000000003300000001504d43000000000b00000049444c3a736d3a312e300020090000004d794f626a65637400202020070000002f4d79504f410020000000000000000050000000010102200a0000003132372e302e302e3100c00b3300000001504d43000000000b00000049444c3a736d3a312e300020090000004d794f626a65637400202020070000002f4d79504f41002000000000Stringified IOR

Stringified IOR, згенерований вдруге на тому ж комп'ютері

Stringified IOR, згенерований на іншому комп'ютері

CORBA-об'єкти та їх особливості

slide24
Додаток

CORBA-об'єкти та їх особливості

ior iop idl
// an Interoperable Object Reference is a sequence of

// object-specific protocol profiles, plus a type ID.

struct IOR {

string type_id; //Repository ID

sequence <TaggedProfile> profiles;

};

struct TaggedProfile {

ProfileId tag;

sequence <octet> profile_data;

};

typedef unsigned long ProfileId;

const ProfileId TAG_INTERNET_IOP = 0;

const ProfileId TAG_MULTIPLE_COMPONENTS = 1;

IOR (файлIOP.idl)

CORBA-об'єкти та їх особливості

profilebody 1 1 iiop idl
struct ProfileBody_1_1 {// also used for 1.2

Version iiop_version;

string host;

unsigned short port;

sequence <octet> object_key;

// Added in 1.1 unchanged for 1.2

sequence <IOP::TaggedComponent> components;

};

ProfileBody_1_1 (файл IIOP.idl)

CORBA-об'єкти та їх особливості

request reply giop idl
struct RequestHeader_1_2 { // GIOP 1.2

unsigned long request_id;

octet response_flags;

octet reserved[3];

TargetAddress target;

string operation;

// Principal not in GIOP 1.2

IOP::ServiceContextList service_context; // 1.2 change

};

struct ReplyHeader_1_2 {

unsigned long request_id;

ReplyStatusType_1_2 reply_status;

IOP::ServiceContextList service_context; // 1.2 change

};

Заголовки Request- та Reply-повідомлень (файл GIOP.idl)

CORBA-об'єкти та їх особливості

request reply giop idl1
typedef short AddressingDisposition;

const short KeyAddr = 0;

const short ProfileAddr = 1;

const short ReferenceAddr = 2;

struct IORAddressingInfo {

unsigned long selected_profile_index;

IOP::IOR ior;

};

union TargetAddress switch (AddressingDisposition) {

case KeyAddr: sequence <octet> object_key;

case ProfileAddr: IOP::TaggedProfile profile;

case ReferenceAddr: IORAddressingInfo ior;

};

enum ReplyStatusType_1_2 {

NO_EXCEPTION, USER_EXCEPTION,

SYSTEM_EXCEPTION, LOCATION_FORWARD,

LOCATION_FORWARD_PERM, // new value for 1.2

NEEDS_ADDRESSING_MODE // new value for 1.2

};

Дані з Request- та Reply-повідомлень (файл GIOP.idl)

CORBA-об'єкти та їх особливості

general inter orb protocol
General Inter-ORB Protocol (GIOP) – загальний (універсальний) між-ORB (міжброкерний) протокол.

Загалом описуються (з використанням IDL) вісім варіантів повідомлень.

// File: GIOP.idl

// From CORBA 3.0: Chapter 15, General Inter-ORB Protocol

// GIOP 1.1

enum MsgType_1_1{

Request, Reply, CancelRequest,

LocateRequest, LocateReply,

CloseConnection, MessageError,

Fragment // GIOP 1.1 addition

};

General Inter-ORB Protocol

CORBA-об'єкти та їх особливості

general inter orb protocol request reply
Request-повідомлення:

заголовок повідомлення містить, зокрема, ідентифікатор запиту, адресу цільового об'єкту (типу TargetAddress), ім'я методу, що викликається;

тіло повідомлення містить значення in-, inout-аргументів методу, що викликається.

Reply-повідомлення:

заголовок повідомлення містить, зокрема, ідентифікатор запиту (того Request-повідомлення, відповіддю на яке є дане Reply-повідомлення), ознаку завершення (наприклад, NO_EXEPTION, USER_EXEPTION, SYSTEM_EXEPTION тощо);

тіло повідомлення у випадку NO_EXEPTION містить обчислені значення out-, inout-аргументів метода, що був виконаний.

General Inter-ORB Protocol. Request- та Reply-повідомлення

CORBA-об'єкти та їх особливості