Попытка подключиться к службе CORBA с использованием URL Corbaloc

StackOverflow https://stackoverflow.com/questions/2800942

  •  25-09-2019
  •  | 
  •  

Вопрос

    String[] orbargs= {};
    org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(orbargs, null);
    org.omg.CORBA.Object cobj = orb.string_to_object("corbaloc:iiop:10.1.1.200:6969/OurServiceHelper");
    _OurServiceHelper cpsh = _OurServiceHelperHelper.narrow(cobj); // Get's stuck
    cpsh.ourMethod();

Этот узкий просто висит.

Мой сервис установлен для запуска на статический порт. И мы знаем, что это работает с тех пор, как мы обычно смотрим на него по именованию.

Что я делаю неправильно?

Это было полезно?

Решение

Если вы используете имя amingservice, вы должны использовать URL CORBANAME вместо URL-адреса CORBALOC. Ниже придется работать, если ваша служба именования находится на порту 6969. Если «OurserviceHelper» находится на 6969, но имя IMINGSERVICE находится в другом порту, вам необходимо указать порт именомочных услуг в URL ниже вместо 6969. Объект сервера встроен в IOR, возвращаемый имени Услуги, так вот почему его не нужно указывать.

"corbaname:10.1.1.200:6969#OurServiceHelper"

Re: Комментарий:Сначала записка о IORS и обслуживании объектов. Если вы хотите, чтобы ваши обслуживаемые объекты были настойчивыми к процессу перезапускается, вы должны установить PERSISTENTПожизненная политика на POA, которая содержит объекты. Кроме того, IOR встраивает IR и порт сервера, поэтому, если вы хотите создать IOR, которые остаются в соответствии с перезапусками, вы должны использовать статический IP и номер порта, а также с использованием постоянной политики жизни.

Название Service облегчает вещи, позволяя вам не нужно беспокоиться о многих этого материала. До тех пор, пока сервис имени достижится в известном месте, все ваши серверные объекты могут просто зарегистрироваться с помощью имени службы, когда они созданы, и клиенты могут получить доступ к ним без необходимости знать, где они расположены.

Если вы решите не использовать сервис имени, который вы код придется несколько изменить. Если вы используете corbalocURL-адрес, то вы используете совместимое обслуживание именования (Ins). Видеть: http://java.sun.com/j2se/1.4.2/docs/guide/idl/instutorial.html.html.. Отказ Использование INS, вам нужно использовать функциональные возможности NamingContextExt объект. В частности, чтобы разрешить URL-адрес Corabloc, который вы построите, вы должны позвонить в NamingContextExt::resolve_strфункция и пройти в URL.

Другие советы

Ключевая часть URL-адреса CORBALOC (string после Slash), может быть, возможно, неверно или не зарегистрирована правильно, и серверида ORB не может сопоставить ключ к ссылке на объект.

Как вы запускаете сервер?

Это должно работать:

<server> -ORBInitRef OurServiceHelper="file://server.ior"

Таким образом, когда запрос CORBALOC поступает в ORB, должен иметь возможность сопоставить ключ к IOR и вернуть вас IOR. Различные ORB имеют разные способы выполнения этого для регистрации первоначального эталона, Tao имеет интерфейс при изменении измерений, называемый IORTABLE.

CORBALOC не имеет информации в этом, поэтому ORB проверяет тип, который вы сути, делая удаленный вызов (_is_a). Попробуйте использовать неконкуренные узкие, которые не будут звонить _is_a:

_OurServiceHelper cpsh = _OurServiceHelperHelper.narrow(cobj);

Странно, что вызов _is_a не возвращается для вас. Я предполагаю, что unchenceed_narrow будет работать работать (вы получите ненутренний результат), но ссылка на объект не будет работать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top