1 / 30

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

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

Download Presentation

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

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. Створення 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-об'єкти та їх особливості

  4. Складові частини IOR у випадкупротоколаIIOP, який ґрунтується на TCP/IP: Repository ID; Profiles: Host IP; Host port; Object Key; POA name; Object ID; Можлива додаткова інформація. Складові частини IOR CORBA-об'єкти та їх особливості

  5. Репозиторні ідентифікатори (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-об'єкти та їх особливості

  6. Можна впливати на генерацію окремих складових 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-об'єкти та їх особливості

  7. СтворенняCORBA-об'єкту – це лише потенційна, але не реальна можливість клієнту скористатись функціональністю CORBA-об'єкта. Після створення CORBA-об'єкта можна “передати” (і для цього є різні можливості) IOR (IO-посилання) на цей об'єкт клієнтській програмі. Та цього замало для забезпечення реалізації клієнтських викликів. Щоб можна було скористатись функціональністю CORBA-об'єкта треба мати сервант (servant) цього CORBA-об'єкта. Сервант – це реальний програмний код, що реалізує експоновану CORBA-об'єктом (інтерфейсом) функціональність. Найчастіше (але не завжди!) сервант – це програмний об'єкт, який реалізує функціональність CORBA-об'єкта (інтерфейсу). (Borland-”майстрами” за IDL-описом інтерфейсу генерується клас реалізації, на основі якого можуть створюватись об'єкти-серванти). CORBA-об'єкти та серванти Створення CORBA-об'єкту – це створення на боці сервера логічного об'єкту (не фізичного, пам'ять безпосередньо під об'єкт не виділяється!) та спеціального (вже фізичного) посилання – інтероперабельного об'єктного посилання – Interoperable Object Reference (IOR). CORBA-об'єкти та їх особливості

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

  9. 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-об'єкти та їх особливості

  10. Варіанти активізації CORBA-об'єктів: явна активізація; активізація за вимогою; неявна активізація; активізація із сервантом за замовчуванням. Варіанти активізації CORBA-об'єктів CORBA-об'єкти та їх особливості

  11. Активізація за вимогою (з використанням ServantActivator). Приклад Створено CORBA-об'єкт без серванту Реєстрація менеджера сервантів Запуск сервера (USE_SERVANT_MANAGER, RETAIN) Запуск клієнта CORBA-об'єкти та їх особливості

  12. Активізація за вимогою (з використанням ServantActivator). Приклад інкарнації CORBA-об'єкти та їх особливості

  13. Активізація за вимогою (з використанням ServantActivator). Ілюстрація до прикладу Запуск сервера (USE_SERVANT_MANAGER, RETAIN) Запуск клієнта CORBA-об'єкти та їх особливості

  14. Активізація за вимогою (з використаннямсерванта за замовчуванням).Приклад Створено два CORBA-об'єкти, обидва “без” сервантів “Реєстрація” серванта за замовчуванням Запуск Smart Agent Запуск сервера (USE_DEFAULT_SERVANT) Запуск клієнта CORBA-об'єкти та їх особливості

  15. Активізація за вимогою (з використаннямсерванта за замовчуванням).Ілюстрація до прикладу Запуск Smart Agent Запуск сервера (USE_DEFAULT_SERVANT) Запуск клієнта CORBA-об'єкти та їх особливості

  16. Установлення зв'язку між клієнтом і серверним CORBA-об'єктом полягає в отримуванні клієнтом інтероперабельного об'єктного посиланняIOR на цей об'єкт. (IOR – Interoperable Object Reference). Термінологія CORBA – “клієнт зв'язується (bind) з CORBA-об'єктом сервера”. Клієнт має отримати посилання IORна CORBA-об'єкт, вважаючи, що той вже існує. Клієнт ніколи не створює CORBA-об'єкт, а тільки зв'язується з ним. Установлення зв'язку між клієнтом і серверним CORBA-об'єктом Створення CORBA-об'єкту – це створення на боці сервера логічного об'єкту та IOR як реального даного. CORBA-об'єкти та їх особливості

  17. 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-об'єкти та їх особливості

  18. Три схеми (шаблони) рядків, розрахованих на застосування у 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-об'єкти та їх особливості

  19. 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-об'єкти та їх особливості

  20. Оbject_to_string, SIOR (Stringified IOR).Фрагменти серверного проекта Створено активний CORBA-об'єкт з сервантом Запис SIOR у файл CORBA-об'єкти та їх особливості

  21. 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-об'єкти та їх особливості

  22. Приклади застосування встановлення зв'язку між клієнтом і серверним CORBA-об'єктом із використанням SIOR: потреба зберегти зв'язок із серверним об'єктом на тривалий час (протягом якого клієнтський процес зупиняється); потреба зберегти посилання на ключові фабрики об'єктів CORBA (чи псевдооб'єктів) або на ключові об'єкти на зразок служби іменування (Naming Service), Trader-служби; потреба зберегти посилання на репозиторій інтерфейсів (InterfaceRepository). Загалом, вважається, що SIOR надає максимально зручний засіб для встановлення зв'язку між клієнтом і серверним CORBA-об'єктом для різних продуктів ORB. Установлення зв'язку між клієнтом і серверним CORBA-об'єктом із використанням SIOR CORBA-об'єкти та їх особливості

  23. IOR:012020200b00000049444c3a736d3a312e30002002000000015349565c000000010102200f00000043505131353833363330323337310020040a0000000000003300000001504d43000000000b00000049444c3a736d3a312e300020090000004d794f626a65637400202020070000002f4d79504f410020000000000000000050000000010102200a0000003132372e302e302e3100c00b3300000001504d43000000000b00000049444c3a736d3a312e300020090000004d794f626a65637400202020070000002f4d79504f41002000000000IOR:012020200b00000049444c3a736d3a312e30002002000000015349565c000000010102200f00000043505131353833363330323337310020040a0000000000003300000001504d43000000000b00000049444c3a736d3a312e300020090000004d794f626a65637400202020070000002f4d79504f410020000000000000000050000000010102200a0000003132372e302e302e3100c00b3300000001504d43000000000b00000049444c3a736d3a312e300020090000004d794f626a65637400202020070000002f4d79504f41002000000000 Stringified IOR Stringified IOR, згенерований вдруге на тому ж комп'ютері Stringified IOR, згенерований на іншому комп'ютері CORBA-об'єкти та їх особливості

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

  25. // 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-об'єкти та їх особливості

  26. 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-об'єкти та їх особливості

  27. 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-об'єкти та їх особливості

  28. 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-об'єкти та їх особливості

  29. 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-об'єкти та їх особливості

  30. Request-повідомлення: заголовок повідомлення містить, зокрема, ідентифікатор запиту, адресу цільового об'єкту (типу TargetAddress), ім'я методу, що викликається; тіло повідомлення містить значення in-, inout-аргументів методу, що викликається. Reply-повідомлення: заголовок повідомлення містить, зокрема, ідентифікатор запиту (того Request-повідомлення, відповіддю на яке є дане Reply-повідомлення), ознаку завершення (наприклад, NO_EXEPTION, USER_EXEPTION, SYSTEM_EXEPTION тощо); тіло повідомлення у випадку NO_EXEPTION містить обчислені значення out-, inout-аргументів метода, що був виконаний. General Inter-ORB Protocol. Request- та Reply-повідомлення CORBA-об'єкти та їх особливості

More Related