Upload
gilon
View
63
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Интеграция на приложения. доц. д-р Станимир Стоянов ПУ “ Паисий Хилендарски ” , Катедра “ Компютърни систми ”. Модул “CORBA”. 12. Object Interface. Съдържание. Въведение Символно представяне на референции Управление на референциите на обектите ORB. Въведение. - PowerPoint PPT Presentation
Citation preview
Станимир Стоянов 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 { //PIDL interface 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 { //PIDL interfaceDef 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
ProxyObject
1
TargetObject
2
OR1
:=
Copy(OR)
TargetObject
1
OR1
CORBA::release()
Client Server
Invalid Object Reference
Грешно копиране на референции
Станимир Стоянов 20
Когато duplicate() се извиква за получаване на ново копие на референция – проксито ще увеличи брояча и ще чака референциите да извикат release() преди да освободи ресурси и да завърши работата си
Ако последната референция към проксито се изтрие без извикване на release() – проксито продължава да резервира излишни ресурси
Ситуация Фиг.6.2.
Станимир Стоянов 21
Client Server
ProxyObject
1
TargetObject
2
OR
ProxyObject
1
TargetObject
2
delete(OR)
x
Грешно изтриване на референции
Станимир Стоянов 22
Коректното използване на duplicate() и release() – Фиг.6.3.
Броячът в проксито отговаря на актуалния брой референции към проксито
Станимир Стоянов 23
ProxyObject
2
TargetObject
2
OR1
:=
OR.duplicate()
TargetObject
2
OR1
CORBA::release(OR)
Client Server
ProxyObject
1x
Коректно използване на операциите.
Станимир Стоянов 24
Какво става когато референциите се копират (с duplicate()) за предаване през границите на машините – Фиг.6.4, Фиг.6.5
Не е показано междинното увеличаване на брояча на проксито B преди кода на skeleton да извърши release() когато предава реферанцията обратно към клиента
Станимир Стоянов 25
Target Object A
Proxy Object B
1
Op1{ …
return OR2.duplicate());
}
Създаване на прокси при предаване на референции
Proxy Object A
1OR
OR=PR1.op1()
Client
Target Object B
1
Server
OR2
1
Client/Server
Станимир Стоянов 26
Target Object A
Proxy Object B
1
Op1{ …
return OR2.duplicate());
}
Създаване на прокси при предаване на референции
Proxy Object B
1
OR1 Client
Target Object B
1
Server
OR2
1
Client/Server
Proxy Object A
1
OR
Станимир Стоянов 27
is_nil – проверява една референция дали означава OBJECT_NIL т.е. няма обект
is_a – връща TRUE ако IR идентификаторът, предаден към нея, реферира един тип, който е този обект е подтип
non_existent – проверява дали съществува инстанция на един обект (на референция). Ако не съществува тогава възниква OBJECT_NOT_EXIST изключение.
hash – използва се за търсене на идентични референции, които са по-ефективни от актуалната.
is_equivalent – проверява дали две референции са еквивалентни т.е. сочат към една и съща инстанция.
create_request – операцията се използва за стартиране процеса за създаване на заявки към реализации на обекти при DII.
Станимир Стоянов 28
Последните три операции са свързани с управление на така наречените “политики”, които управляват жизнения цикъл и поведението на обектите.