Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

Разные обьектные ссылки C++ и Java.   Найти похожие ветки 

 
nikols ©   (2002-06-28 09:08) [0]

До настоящего момента использовали для написания серверов C++Builder, решили переписать некоторые сервера на JBuilder. Используется передача обьектной ссылки между серверами в строковом виде. Выяснилось, что ссылки имеют разный формат.

D:\>printior cpp.ior
Interoperable Object Reference:
 Type ID: IDL:modDataServer/IDataServer:1.0
 Contains 2 profiles.
 Profile 0-LIOP Profile:
   version: 1.2
   host: vasja
   pid: 1196
   unique_id: 0
   Object Key: ServiceId[service=/IDataServer_poa,id={6 bytes: [S][A][S][H][A][
1]}]
 Profile 1-IIOP Profile:
   version: 1.2
   host: 169.135.227.111
   port: 1280
   Object Key: ServiceId[service=/IDataServer_poa,id={6 bytes: [S][A][S][H][A][
1]}]


D:\>printior java.ior
Interoperable Object Reference:
 Type ID: *
 Contains 2 profiles.
 Profile 0-LIOP Profile:
   version: 1.2
   host: vasja
   pid: 1196
   unique_id: 0
   Object Key: ServiceId[service=/IDataServer_poa,id={}]
 Profile 1-IIOP Profile:
   version: 1.2
   host: 169.135.227.111
   port: 1280
   Object Key: ServiceId[service=/IDataServer_poa,id={6 bytes: [S][A][S][H][A][
1]}]


Получение ссылки:
С++:
       PortableServer::ObjectId_var managerId =
           PortableServer::string_to_ObjectId(parNameSession.c_str());
      FIDataServer = modDataServer::IDataServer::_bind(
          "/IDataServer_poa", managerId);

Java:
    theFIDataServer =
     modDataServer.IDataServerHelper.bind(orb, "/IDataServer_poa", parNameSession.getBytes());


Преобразование в строку:
С++:
       CORBA::String_var strFIDataServer = orb->object_to_string(FIDataServer);CODE>
Java:
    String strFIDataServer =  orb.object_to_string(theFIDataServer);


Не подскажете, в чем дело и как их привести к одинаковому виду?


 
epflorov ©   (2002-08-29 23:31) [1]

Здравствуйте.
В спецификации CORBA
"4 ORB Interface
4.2.2.2 string_to_object
...
Для гарантии, что ORB поймет строковую форму объектной ссылки, операция object_to_string этого ORB"а должна быть использована для получения строки. Для всех совместимых ORB"ов, если obj допустимая ссылка на объект, то string_to_object(object_to_string(obj)) вернет правильную ссылку на тот же объект, если две операции выполнены у одного и того же ORB"а.
Для всех совместимых ORB"ов, это остается истинным, даже если две операции выполнены у различных ORB"ах."

Как это понимать? Черт его знает. Почему-то у меня этот абзац вызывает чувство внутреннего противоречия.
Ясно одно - со строковым представлением чего-то не то...


 
Аристархов Андрей   (2002-09-10 12:37) [2]

Если внимательно посмотреть на то, что выдает printior, то можно заметить, что ссылки различаются в части LIOP (Local Profile), т.е. ссылки, которая используется для взаимодействия объектов в рамках одного адресного пространства. Поэтому никакого воздействия это различие на межпроцессное взаимодействие не несет.

В принципе и в спецификации все понятно (если читать в оригинале). Евгений, не обижайся, но при переводе надо переводить фразы/предложения а не отдельные слова. Поскольку построение предложения в английском языке и в русском отличается (причем, существенно), то перевод с английского на русский без перестроения предложения может вызвать много неясностей.
Я бы приведенный тобой абац перевел таким образом.
...
Для гарантии того, что ORB поймет строковое представление объектной ссылки, для создания строки должна быть использована операция object_to_string этого же ORB"а. Для всех ORB"ов, соответствующих стандарту истинно следующее утверждение: если obj является действительной объектной ссылкой, то string_to_object(object_to_string(obj)) вернет действительную объектную ссылку на тот же объект, если две вышеописанные операции выполнены в рамках одного и того же ORB. Для всех ORB"ов, соответствующих стандарту и поддерживающих IOP (Inter-ORB protocol) приведенное выше утверждение верно даже в том случае, если операции выполнены в рамках различных ORB"ов.
...


 
epflorov ©   (2002-09-10 19:17) [3]

Все замечания приняты. Работаю над этим в поте лица :).
Может кто хочет поучаствовать в моей инициативе http://corbaejb.mastak.ru/translate/index.htm ? :)



Страницы: 1 вся ветка

Текущий архив: 2004.08.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
3-1090749396
a3a3ello
2004-07-25 13:56
2004.08.22
InterBase -> Firebird


14-1090698815
Marser
2004-07-24 23:53
2004.08.22
Уезжаю!


3-1091083229
WondeRu
2004-07-29 10:40
2004.08.22
SQL. Как использовать процедуру для WHERE


3-1091195736
Koala
2004-07-30 17:55
2004.08.22
Активные подключения


10-1030551543
kavlad
2002-08-28 20:19
2004.08.22
CORBA-сервер, возвращающий файл.