2

CORBA を使用して対話する Java クライアント/サーバー アプリケーションを作成しようとしています。私はこの例に従い、「Java IDL Object Request Broker Daemon、orbd」を使用して動作させることができました。しかし、orbd ではなくローカルの omniNames インストールを指すようにサーバーを変更すると、次のエラーが発生します。

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");

omn​​iNames サーバーに関する限り、既にそれを使用している無数の他のアプリケーション (c++) があるため、それが適切にインストールされ、構成されていることはわかっています。これらの他のアプリのソース コードを調べたところ、同じことをしているようです。

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

間違ったポートを使用すると、接続エラーが発生するため、ネットワークエラーではないことはわかっています。私はロープの終わりにいます、何かアイデアはありますか?

4

1 に答える 1

2

問題は、Java サーバーと CORBA サーバーの間にありました。CORBA サーバー (omniOrbs の一部) として omniNames を使用しています。どうやらJavaには、デフォルトでomniNamesと互換性のない非標準のブートストラップがあります。Java ブートストラップのサポートを有効にするために、omniNames を次の引数で開始できます。

'-ORBsupportBootstrapAgent 1'

それを追加した後、すべてが正常に機能します。詳細はこちらで読むことができます。

于 2012-07-23T14:15:18.897 に答える