1 / 28

Интеграция на приложения

Интеграция на приложения. доц. д-р Станимир Стоянов ПУ “ Паисий Хилендарски ” , Катедра “ Компютърни систми ”. Модул “CORBA”. 12. Object Interface. Съдържание. Въведение Символно представяне на референции Управление на референциите на обектите ORB. Въведение.

gilon
Télécharger la présentation

Интеграция на приложения

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. Интеграция на приложения доц. д-р Станимир Стоянов ПУ “Паисий Хилендарски”, Катедра “Компютърни систми” Станимир Стоянов

  2. Модул “CORBA” Станимир Стоянов

  3. 12. Object Interface Станимир Стоянов

  4. Съдържание • Въведение • Символно представяне на референции • Управление на референциите на обектите ORB Станимир Стоянов

  5. Въведение Станимир Стоянов

  6. Интерфейсът ORB и Object – директно достъпен от клиентите и реализацията на обектитеПричини за това:- Възможност за представяне на обектните референции като символни низове- Трансформацията им във вътрешно представяне- Копиране и изтриване на референции- Сравняване на референции Станимир Стоянов

  7. Интерфейсът Object дефинира някои операции, които се извършват с референциите.Той се наследява от всеки обект, но не се реализира – операциите се извършват от ORB.В езика на CORBA тези операции са реализирани посредством псевдо-обект – не от актуален CORBA обект. Станимир Стоянов

  8. Интерфейсите на псевдо-обектите са дефинирани в OMG IDL, но съществуват някои разлики: • Един псевдо-обект не може да се специфицира като параметър в операция на нормален обект; • Не може да бъде достъпен чрез DII • Няма дефиниции в IR. IDL, който се използва за тези обекти се нарича псевдо-IDL (PIDL). Станимир Стоянов

  9. Символно представяне на референции Станимир Стоянов

  10. Референциите на обектите: • Вътрешни представяния, непрозрачни за външния свят • За да могат да бъдат персистентно съхранявани те трябва да бъдат представени в символен формат • В символен формат могат да бъдат предавани посредством e-mail, Web сайтове, като аргументи на операции. Станимир Стоянов

  11. module CORBA { //PIDLinterface ORB {string object_to_string(in Object obj);Object string_to_object(in string obj); };}; Станимир Стоянов

  12. Управление на референциите на обектите Станимир Стоянов

  13. CORBA::Object - основен интерфейс за всички CORBA обекти: • Операциите могат да се извикат за всяка обектна референция • В повечето случаи функционалността е реализирана в стандартни библиотеки, които се доставят от ORB. Станимир Стоянов

  14. module CORBA { interface Object { //PIDLinterfaceDef get_interface ();boolean is_nil ();Object duplicate ();void release ();boolean is_a (in string logical_type_id);boolean non_existent ();boolean is_equivelent (in Object other_object);unsigned long hash (in unsigned long maximum); Policy get_policy (in Policy Type policy_type); Object set_policy_overrides (in PolicyList policies, in SetOverrideTyp set_add); DomainManagersList get_domain_managers (); void create_request (…) // by the DII};}; Станимир Стоянов

  15. Операция get_interface – връща стандартен интерфейс от IR. Така можем да анализираме дефиницията на интерфейса за съдържащите се операции в run-time.Можем да използваме DII за извикване на тези операции. Станимир Стоянов

  16. Duplicateи release: • Многосъществени за езици с явно управление на паметта (C,C++) – Java е с неявно автоматично управление • Осигуряват коректно управление на копията на обектните референции • Когато една референция трябва да се предаде към друг обект или контролна нишка, вътрешния тип, реализиращ референцията, не трябва да се копира с помощта на средствата на езика за реализация– трябва да се използва операцията duplicate() Станимир Стоянов

  17. Причините за това: • Когато един отдалечен клиент използва една референция – локално се създава един обект-пълномощник (proxy object), който извиква директно съответната операция • Прокси обектът (в съгласие с ORB) създава заявката, която отива при реализацията на обекта • Проксито поддържа брояч за всички референции, които се отнасят за него – нарича се reference count Станимир Стоянов

  18. Ако едно копие на референцията се направи без знанието на проксито, тогава броячът не се увеличава • Когато се освобождават референциите проксито не знае за съществуването на “нелегалната” реферeнция – тогава освобождава използваните ресурси и се изтрива от системата (ако се опитаме да осъществим достъп до нелегалната референция системата връща run-time error) • Ситуацията на Фиг.6.1. Станимир Стоянов

  19. Client Server OR1 := Copy(OR) ProxyObject TargetObject TargetObject 1 2 1 Invalid Object Reference OR1 CORBA::release() Грешно копиране на референции Станимир Стоянов

  20. Когато duplicate() се извиква за получаване на ново копие на референция – проксито ще увеличи брояча и ще чака референциите да извикат release() преди да освободи ресурси и да завърши работата си • Ако последната референция към проксито се изтрие без извикване на release() – проксито продължава да резервира излишни ресурси • Ситуация Фиг.6.2. Станимир Стоянов

  21. Client Server OR ProxyObject TargetObject ProxyObject TargetObject 1 2 1 2 delete(OR) x Грешно изтриване на референции Станимир Стоянов

  22. Коректното използване на duplicate() и release() – Фиг.6.3. • Броячът в проксито отговаря на актуалния брой референции към проксито Станимир Стоянов

  23. Client Server OR1 := OR.duplicate() ProxyObject TargetObject TargetObject ProxyObject 2 2 2 1 OR1 CORBA::release(OR) x Коректно използване на операциите. Станимир Стоянов

  24. Какво става когато референциите се копират (с duplicate()) за предаване през границите на машините – Фиг.6.4, Фиг.6.5 • Не е показано междинното увеличаване на брояча на проксито B преди кода на skeleton да извърши release() когато предава реферанцията обратно към клиента Станимир Стоянов

  25. Server Target Object B 1 Създаване на прокси при предаване на референции Client Proxy Object A OR=PR1.op1() OR 1 Target Object A Op1{ … return OR2.duplicate()); } Proxy Object B OR2 1 1 Client/Server Станимир Стоянов

  26. Server Proxy Object A Proxy Object B Target Object B 1 1 1 Създаване на прокси при предаване на референции OR1 OR Client Target Object A Op1{ … return OR2.duplicate()); } Proxy Object B OR2 1 1 Client/Server Станимир Стоянов

  27. is_nil – проверява една референция дали означава OBJECT_NIL т.е. няма обект • is_a – връща TRUE ако IR идентификаторът, предаден към нея, реферира един тип, който е този обект е подтип • non_existent – проверява дали съществува инстанция на един обект (на референция). Ако не съществува тогава възниква OBJECT_NOT_EXIST изключение. • hash – използва се за търсене на идентични референции, които са по-ефективни от актуалната. • is_equivalent – проверява дали две референции са еквивалентни т.е. сочат към една и съща инстанция. • create_request – операцията се използва за стартиране процеса за създаване на заявки към реализации на обекти при DII. Станимир Стоянов

  28. Последните три операции са свързани с управление на така наречените “политики”, които управляват жизнения цикъл и поведението на обектите. Станимир Стоянов

More Related