Об'єктне посилання

Сервант

Отже, ви можете створити CORBA -объект і навіть встановити з ним зв'язок. У загальному випадку цього абсолютно недостатньо, щоб використовувати його в конкретній програмі. Функціональність CORBA -объекта недоступна для клієнта до тих пір, поки в програмі (серверному застосуванні) не створений об'єкт, який дозволяє дістати доступ до методів, оголошених в IDL -интерфейсе. Цей об'єкт (реалізований на C++, Java, C, Cobol, Ada, Smalltalk або деяких інших мовах) і називається "сервантом".

Звичайно, залежно від використовуваної мови програмування, серванти реалізуються по-різному. Для об'єктно-орієнтованих мов сервант є екземпляром (instance) деякого класу, методи якого реалізують потрібну функціональність. Такий клас часто називають "класом реалізації".

За час існування CORBA -объекта з ним може бути зіставлена безліч різних реалізацій сервантів (але не більше за одне за раз). Більше того, вони можуть міститися в адресному просторі різних застосувань. Ці застосування можуть бути навіть запущені на різних комп'ютерах.

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

Єдина складність, пов'язана з розумінням сенсу терміну "об'єктне посилання", полягає в тому, що він використовується в двох різних сенсах.

Є об'єктне посилання "світу CORBA", яка є закодованою інформацією про CORBA -объекте. Вона включає ім'я хоста, порту TCP/IP (чи координати Репозитария Реалізацій), звичайно ж, унікальний ідентифікатор цього CORBA -объекта і безліч іншої інформації, що дозволяє клієнтові встановити зв'язок з серверним об'єктом через межі мов програмування, операційних систем і апаратних платформ. Операції з об'єктним посиланням неможливі для клієнта, за винятком того, що клієнт може перетворити її на рядок і записати у файл або базу даних. Згодом хто завгодно може рахувати такий рядок і перетворити його знову в об'єктне посилання.

У іншому розумінні "об'єктне посилання" - це змінна тієї або іншої мови програмування, за допомогою якої клієнт здійснює виклик видалених методів. У наступних розділах будуть наведені приклади отримання і використання такого об'єктного посилання. Надалі усі згадки об'єктних посилань відносяться саме до цього, другому, типу об'єктних посилань.

Концептуально змінна типу "об'єктне посилання" є покажчиком на так званий "proxy-объект", який існує на стороні клієнта і забезпечує виконання видалених викликів. Сам proxy -объект зроблений недоступним для програміста; пов'язано це з тим, що його створення - завдання не клієнтського застосування, а самого ORB 'а. Логічно з кожним proxy -объектом зіставлена окреме об'єктне посилання, і під копіюванням об'єктного посилання слід розуміти створення як нового proxy -объекта, так і налаштованого на нього нового "покажчика". Зрозуміло, в реальних реалізаціях фізичного копіювання proxy -объекта не відбувається - як завжди в таких випадках, використовується механізм лічильника посилань.

Дуже важливо виразно розуміти, що копіювання (чи знищення) об'єктних посилань на стороні клієнта впливає виключно на клієнтське застосування. Неправильне ведення лічильника посилань в самому гіршому випадку приведе до продовження фізичного існування в клієнтському додатку непотрібного proxy -объекта. Ніякого відношення до серверного об'єкту ці дії не можуть мати в принципі. І створення, і знищення сервантів або серверних CORBA -объектов - завдання серверного застосування. Філософія CORBA полягає в тому, щоб клієнт посилав повідомлення "встановити зв'язок з існуючим об'єктом" і "розірвати з ним зв'язок", а не "створити серверний об'єкт" і "знищити його". Зрозуміло, клієнт може ініціювати створення Corba -объектов викликавши у видаленого об'єкту спеціально передбачений для цього програмістом (автором об'єкту) метод.

Створення простого об'єкту і його використання

Як ні важливе розуміння теоретичних аспектів CORBA, все ж приклад використання у багатьох випадках здатний сказати більше, ніж самі просторові міркування. Як демонстрація етапів створення CORBA -приложения напишемо простий приклад. Сервер створює об'єкт, що реалізовує операцію складання двох цілих чисел. Клієнт встановлює зв'язок з серверним об'єктом, а потім викликає цей його єдиний метод, виводячи результат на екран. У прикладі використовується мова C++.

Перший етап створення CORBA -приложения - написання усіх необхідних IDL -деклараций. У нашому випадку IDL -код може виглядати так:

interface MyInterface { long Summa (in long op1, in long op2); };

Наступний крок - це генерація файлів на стороні клієнта і сервера за допомогою компілятора idl2cpp. Як вхід компілятор отримує список idl -файлов. У нашому випадку це єдиний файл, що містить наведений вище опис. Для файлу з ім'ям, наприклад, SimpleIDL.idl будуть згенеровані файли SimpleIDL_c.hh, SimpleIDL_c.cpp (для використання на стороні клієнта) і SimpleIDL_s.hh, SimpleIDL_s.cpp (для використання на стороні сервера).