pObj);
Дочірні POA створюються за допомогою звернення до вже створених POA як до фабрик. Майте на увазі, що дочірній POA не успадкує властивостей свого базового POA - набір властивостей для кожного створюваного об'єктного адаптера потрібно вказувати явно. Наприклад, якщо ви хочете створювати В«довгоживучіВ» об'єкти, то спочатку потрібно створити відповідний POA. p align="justify"> Перед створенням дочірніх POA бажано створити так званий В«менеджерВ» POA. Він відповідає за розподіл клієнтських запитів між сервантами, що перебувають під управлінням різних POA, а також за управління їх (POA) циклом життя. Фабрикою такого менеджера може бути Root POA. При створенні дочірніх об'єктних адаптерів ви вказуєте менеджер POA в якості аргументу. Якщо ви не створили свій менеджер і замість його імені при виклику методу створення POA вказали nil, то буде неявно створений і використаний менеджер за замовчуванням. p align="justify"> Процес знищення об'єктних адаптерів відбувається в певному порядку - спочатку дочірні POA, потім їх В«батькиВ».
Створення об'єкта з використанням POA
Наведемо приклад створення об'єкта з використанням myPOA. Як вже говорилося, з кожним CORBA-об'єктом потрібно зіставити В«ключВ» - ідентифікатор, який дозволяє однозначно ідентифікувати цей об'єкт. Давайте задамо цей ідентифікатор явно. Для цього викличемо метод, який дозволяє створити цей ідентифікатор на основі рядки: 8
PortableServer :: ObjectId_var objID =
PortableServer :: string_to_ObjectId ("MyObject");
Наступні дві команди створюють сервант, а потім і CORBA-об'єкт із зазначеним ObjectID:
MyInterfaceImpl servant;
myPOA-> activate_object_with_id (objID, & servant);
Нарешті, для початку обробки запитів від клієнта ви повинні активізувати менеджер POA:> activate ();
Практику, коли для кожного CORBA-об'єкта під час запуску програми створюється свій сервант, не можна визнати вдалою - так можна В«з'їстиВ» будь-яку кількість ресурсів. Раніше говорилося, що розробник може створювати CORBA-об'єкти і без створення сервантів. Зробити це дуже просто:
myPOA-> create_reference_with_id (
objID, "IDL: MyInterface: 1.0");
Зіставити з таким об'єктом сервант можна пізніше, причому самими різними способами.
Тимчасові і довгоживучі об'єкти
У CORBA є команди створення об'єктів, але немає команди їх знищення. Зроблено це тому, що вкрай важко знайти конкретний компонент CORBA, який взяв би на себе В«працяВ» надійного і безпечного знищення об'єктів. У результаті цього, під знищенням об'єкта розуміється деяка послідовність дій, які призводять до того, що жоде...