![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Ojbcet JtObec
представ л яют собой перестановки строки Object. К л иент передает серверу строку и сервер генерирует N перестановок. Сервер связывает и м я «Inflection» с именным контекстом. Именно это имя программа-клиент должна задать, чтобы получить объектную ссылку из именного контекста. // Программа 8.4 1 int main(int argc, char *argv[]) 2 { 4 try{ 5 CORBA:: ORB_var Orb = CORBA:: ORB_init(argc, argv, «mico-local-orb»); 6 object_reference Remote(«NameService», Orb); 7 Remote.objectName(«Inflection»); 8 permutation_var Client =permutation:: _narrow(Remote.objectReference()); 9 char Value[1000]; strcpy(Value, «Common Object Request Broker»); 11 Client-> original(Value); 12 int N; 12 for(N = 0; N < 15; N++) 14 { 15 cout ««Значение функции nextPermutation() " < < Client- > nextPermutation() «endl; 16) 17 } 18 catch(CosNaming:: NamingContext:: NotFound_catch & exc) { 19 cerr < < " Исключение: объект не обнаружен.» «endl; 20 } 21 catch(CosNaming:: NamingContext:: InvalidName_catch & exc) { 22 cerr < < «Исключение: некорректное имя.» «endl; 23 } 25 return(0); 26 } Для доступа к соответствую щ ему объекту и м енного контекста в програ мм е-потребителе необхо д и м о выполнить следующие три д ействия. 1. Получить ссылку на службу имен. 2. С помощью службы имен получить ссылку на соответствующий именной контекст. 3. С помощью именного контекста получить ссылку иа соответствующий объект. Действие 1 реализуетс я путе м вызова м ето д а resolve_initial_references(): //... CORBA:: Object_var NameService; NameService = Orb-> resolve_initial_references («NameService»); //... Функция resolve_initial_references () возвратит объектную ссылку на службу имен. В действии 2 эта ссылка используетс я дл я получения объектной ссылки на именной контекст: CosNaming:: NamingContext_var NameContext; NameContext = CosNaming:: NamingContext:: _narrow (NameService); В действии 3 значение объектной ссылки NameService «сужается», т.е. приводится к соответствую щ ему типу, в результате чего получаетс я объектнал ссылка на и м енной контекст NameContext. С по м ощью объекта NameContext програ мм а-потребитель может вызвать его м етод resolve(). Строки 24-27 из програ мм ы8.3 используютс я дл я построени я и м ени, которое и будет передано м етолу resolve (). Name. length (1); Name[Q].id = CORBA:: string_dup («Inflection»); Name[C].kind = CORBA:: string_dup (" "); try { ObjectReference = NameContext-> resolve (Name); } Метод resolve() возвращает объектную ссылку, связанную с заданным именем объекта. В данном случае задано имя «Inflection». Обратите внимание на то, что такое же имя связывается с именным контекстом в программе8.3 (строка28). Если программа-потребитель имеет объектную ссылку, она может ее «сузить», а затем с ее помощью получить доступ к удаленному объекту. Процесс получения объектной ссылки на удаленный объект вполне тривиален, и поэтому имеет смысл его упростить путем инкапсуляции соответствующих компонентов в классе. class object_reference{ //... protected: CORBA:: Object_var NameService; CosNaming:: NamingContext_var NameContext; CosNaming:: Name Name; CORBA:: Object_var ObjectReference; public: object_reference(char *Service, CORBA:: ORB_var Orb); CORBA:: Object_var objectReference(void); void objectName(char *FileName, CORBA:: ORB_var Orb); void objectName(char *OName); //... } Про г рамма 8.4 использует преи м у щ ества просто г о каркасно г о к л асса obj ect_reference, который м ы создали с этой целью. В про г ра мм е 8.4 (строка 6) обратите вни м ание на создание объекта Remote типа object_reference. В строке 8 этот объект используется для получения ссылки на удаленный объект с помощью следующего вызова м етода:
|