javajakarta-eecorbaomniorb

org.omg.CORBA.OBJECT_NOT_EXIST when trying to get the root naming context "NameService"


I'm trying to create a java client/server application that uses CORBA to interact. I followed this example and was able to get it to work using the 'Java IDL Object Request Broker Daemon, orbd'. But when I change the server to point at our local omniNames install instead of orbd, I get this error:

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 ...

The line that is causing the error:

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

As far a the omniNames server goes, I know its installed and configured properly since we have countless other applications that are already using it (c++). I've looked at the source code of these other apps and they appear to be doing the same thing:

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

I know its not a network error, because if I use the wrong port a get a no-connection error. I'm at the end of my rope, any ideas?


Solution

  • The problem ended up being between my java server and my CORBA server. I'm using omniNames as as the CORBA server (part of omniOrbs). Apparently java has a non-standard bootstrap which isn't compatible with omniNames by default. To enable support for the java bootstrap, omniNames can be started with the argument:

    '-ORBsupportBootstrapAgent 1'
    

    Everything works fine after adding that. More can be read here.