org.omg.CORBA.OBJECT_NOT_EXIST при попытке получить корневой контекст именования "NameService"

Я пытаюсь создать клиент-серверное приложение Java, которое использует CORBA для взаимодействия. Я последовал этому примеру и смог заставить его работать, используя 'Java IDL Object Request Broker Daemon, orbd'. Но когда я изменяю сервер, чтобы он указывал на нашу локальную установку omniNames вместо orbd, я получаю эту ошибку:

C:\Hello>java HelloServer -ORBInitialPort 7000 -ORBInitialHost 192.168.1.5
ERROR: org.omg.CORBA.OBJECT_NOT_EXIST:   vmcid: OMG  minor code: 1  completed: No
org.omg.CORBA.OBJECT_NOT_EXIST:   vmcid: OMG  minor code: 1  completed: No
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase.getSystemException(MessageBase.java:897)
        at com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage_1_0.getSystemException(ReplyMessage_1_0.java:94)
        at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.getSystemExceptionReply(CorbaMessageMediatorImpl.java:572)
        at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.processResponse(CorbaClientRequestDispatcherImpl.java:452)
        at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.marshalingComplete(CorbaClientRequestDispatcherImpl.java:339)
        at com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.invoke(CorbaClientDelegateImpl.java:129)
        at com.sun.corba.se.impl.resolver.BootstrapResolverImpl.invoke(BootstrapResolverImpl.java:89)
        at com.sun.corba.se.impl.resolver.BootstrapResolverImpl.resolve(BootstrapResolverImpl.java:107)
        at com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:22)
        at com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:22)
        at com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:22)
        at com.sun.corba.se.impl.orb.ORBImpl.resolve_initial_references(ORBImpl.java:1151)
        at HelloServer.main(HelloServer.java:51)
HelloServer Exiting ...

Строка, которая вызывает ошибку:

org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");

Что касается сервера omniNames, я знаю, что он установлен и настроен правильно, поскольку у нас есть множество других приложений, которые уже используют его (C++). Я посмотрел на исходный код этих других приложений, и они, кажется, делают то же самое:

tmpRef = moOrb->resolve_initial_references("NameService");

Я знаю, что это не сетевая ошибка, потому что, если я использую неправильный порт, получаю ошибку отсутствия соединения. Я в конце своей веревки, есть идеи?

1 ответ

Решение

Проблема оказалась между моим сервером Java и сервером CORBA. Я использую omniNames в качестве сервера CORBA (часть omniOrbs). Очевидно, у java есть нестандартный загрузчик, который по умолчанию не совместим с omniNames. Чтобы включить поддержку загрузчика Java, omniNames можно запустить с аргументом:

'-ORBsupportBootstrapAgent 1'

Все работает нормально после добавления этого. Подробнее можно прочитать здесь.

Другие вопросы по тегам