28
Станимир Стоянов 1 Интеграция на приложения доц. д-р Станимир Стоянов ПУ “Паисий Хилендарски”, Катедра “Компютърни систми”

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

  • Upload
    gilon

  • View
    63

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

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

Станимир Стоянов 1

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

доц. д-р Станимир СтояновПУ “Паисий Хилендарски”, Катедра “Компютърни систми”

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

Станимир Стоянов 2

Модул “CORBA”

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

Станимир Стоянов 3

12. Object Interface

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

Станимир Стоянов 4

Съдържание

Въведение

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

Управление на референциите на обектите ORB

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

Станимир Стоянов 5

Въведение

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

Станимир Стоянов 6

Интерфейсът ORB и Object – директно достъпен от клиентите и реализацията на обектите

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

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

Станимир Стоянов 7

Интерфейсът Object дефинира някои операции, които се извършват с референциите.

Той се наследява от всеки обект, но не се реализира – операциите се извършват от ORB.

В езика на CORBA тези операции са реализирани посредством псевдо-обект – не от актуален CORBA обект.

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

Станимир Стоянов 8

Интерфейсите на псевдо-обектите са дефинирани в OMG IDL, но съществуват някои разлики:

Един псевдо-обект не може да се специфицира като параметър в операция на нормален обект;

Не може да бъде достъпен чрез DII Няма дефиниции в IR.

IDL, който се използва за тези обекти се нарича псевдо-IDL (PIDL).

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

Станимир Стоянов 9

Символно представяне на

референции

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

Станимир Стоянов 10

Референциите на обектите: Вътрешни представяния, непрозрачни

за външния свят За да могат да бъдат персистентно

съхранявани те трябва да бъдат представени в символен формат

В символен формат могат да бъдат предавани посредством e-mail, Web сайтове, като аргументи на операции.

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

Станимир Стоянов 11

module CORBA { //PIDL interface ORB { string object_to_string(in Object obj);

Object string_to_object(in string obj); };};

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

Станимир Стоянов 12

Управление на референциите на обектите

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

Станимир Стоянов 13

CORBA::Object - основен интерфейс за всички CORBA обекти:

Операциите могат да се извикат за всяка обектна референция

В повечето случаи функционалността е реализирана в стандартни библиотеки, които се доставят от ORB.

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

Станимир Стоянов 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 };};

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

Станимир Стоянов 15

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

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

Станимир Стоянов 16

Duplicate и release: Много съществени за езици с явно управление на

паметта (C,C++) – Java е с неявно автоматично управление

Осигуряват коректно управление на копията на обектните референции

Когато една референция трябва да се предаде към друг обект или контролна нишка, вътрешния тип, реализиращ референцията, не трябва да се копира с помощта на средствата на езика за реализация – трябва да се използва операцията duplicate()

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

Станимир Стоянов 17

Причините за това: Когато един отдалечен клиент използва една

референция – локално се създава един обект-пълномощник (proxy object), който извиква директно съответната операция

Прокси обектът (в съгласие с ORB) създава заявката, която отива при реализацията на обекта

Проксито поддържа брояч за всички референции, които се отнасят за него – нарича се reference count

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

Станимир Стоянов 18

Ако едно копие на референцията се направи без знанието на проксито, тогава броячът не се увеличава

Когато се освобождават референциите проксито не знае за съществуването на “нелегалната” реферeнция – тогава освобождава използваните ресурси и се изтрива от системата (ако се опитаме да осъществим достъп до нелегалната референция системата връща run-time error)

Ситуацията на Фиг.6.1.

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

Станимир Стоянов 19

ProxyObject

1

TargetObject

2

OR1

:=

Copy(OR)

TargetObject

1

OR1

CORBA::release()

Client Server

Invalid Object Reference

Грешно копиране на референции

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

Станимир Стоянов 20

Когато duplicate() се извиква за получаване на ново копие на референция – проксито ще увеличи брояча и ще чака референциите да извикат release() преди да освободи ресурси и да завърши работата си

Ако последната референция към проксито се изтрие без извикване на release() – проксито продължава да резервира излишни ресурси

Ситуация Фиг.6.2.

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

Станимир Стоянов 21

Client Server

ProxyObject

1

TargetObject

2

OR

ProxyObject

1

TargetObject

2

delete(OR)

x

Грешно изтриване на референции

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

Станимир Стоянов 22

Коректното използване на duplicate() и release() – Фиг.6.3.

Броячът в проксито отговаря на актуалния брой референции към проксито

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

Станимир Стоянов 23

ProxyObject

2

TargetObject

2

OR1

:=

OR.duplicate()

TargetObject

2

OR1

CORBA::release(OR)

Client Server

ProxyObject

1x

Коректно използване на операциите.

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

Станимир Стоянов 24

Какво става когато референциите се копират (с duplicate()) за предаване през границите на машините – Фиг.6.4, Фиг.6.5

Не е показано междинното увеличаване на брояча на проксито B преди кода на skeleton да извърши release() когато предава реферанцията обратно към клиента

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

Станимир Стоянов 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

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

Станимир Стоянов 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

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

Станимир Стоянов 27

is_nil – проверява една референция дали означава OBJECT_NIL т.е. няма обект

is_a – връща TRUE ако IR идентификаторът, предаден към нея, реферира един тип, който е този обект е подтип

non_existent – проверява дали съществува инстанция на един обект (на референция). Ако не съществува тогава възниква OBJECT_NOT_EXIST изключение.

hash – използва се за търсене на идентични референции, които са по-ефективни от актуалната.

is_equivalent – проверява дали две референции са еквивалентни т.е. сочат към една и съща инстанция.

create_request – операцията се използва за стартиране процеса за създаване на заявки към реализации на обекти при DII.

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

Станимир Стоянов 28

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