我正在尝试使用在不同计算机上运行的组件运行波形。也就是说,我想要A-> B,其中组件A在机器1上的GPP上运行,组件B在机器2上的GPP上运行。系统A上的CORBA名称服务器在系统B上的REDHAWK中可见,但我无法访问远程运行波形时的设备或组件。 如何让一台机器上的设备可供REDHAWK在另一台机器上运行?
Thanx的帮助!
-jerhill
答案 0 :(得分:1)
在多台计算机上传播REDHAWK组件和设备的关键是确保您的CORBA通信在计算机之间正常工作。这通常相当于正确配置/etc/omniORB.cfg。首先,在一台计算机上,您应该运行omniNames和omniEvents,并按section 2.6 of the documentation设置配置。供参考:
InitRef = NameService=corbaname::127.0.0.1
InitRef = EventService=corbaloc::127.0.0.1:11169/omniEvents
在第二台机器上,您的InitRef必须指向第一台机器。如果第一台机器是192.168.1.100,那么你的第二台机器的配置可能包含:
InitRef = NameService=corbaname::192.168.1.100
InitRef = EventService=corbaloc::192.168.1.100:11169/omniEvents
您应该能够在第二台计算机上验证这是否正常:
$ nameclt list
您需要解决的下一个问题是确保CORBA对象正在侦听相应的网络接口,并在其IOR中发布允许它们到达的信息。在每个配置文件中,我建议您添加一行来告诉omniORB在该计算机上创建的哪些端点CORBA对象应该监听。例如,在您的第一台机器上:
endPoint = giop:tcp:192.168.1.100:
endPoint = giop:unix:
这告诉omniORB CORBA对象应该在192.168.1.100上选择他们选择的TCP端口。它还添加了一个Unix管道,以便在同一台机器上快速访问对象。 omniORB将在该对象的IOR中发布此信息。您在此处选择的内容非常重要 - 如果您使用其他计算机无法访问的IP,或使用其他计算机无法解析的主机名,则CORBA连接将失败。
在两台计算机上配置endPoint设置后,您可能会发现检查IOR中包含的信息很有用。如果您可以访问命名服务,则可以检索对象的IOR。例如,如果您运行名为“REDHAWK_DEV”的域名,则可以通过以下方式获取域管理员的IOR:
$ nameclt resolve REDHAWK_DEV/REDHAWK_DEV
然后,将IOR提供给catior:
$ catior IOR:012345...
catior将为您解除IOR的负责,并向您显示客户端将连接到的地址和端口。
答案 1 :(得分:0)
基于B上的程序可以在A上看到名称服务这一事实,我认为该问题与设备/设备管理器配置有关。
确保B上的设备管理器符合以下条件:
如果满足这些条件并且您的系统仍然无法正常工作,请从命令行运行nodeBooter发布stdout,用于未注册的设备管理器和您尝试注册的域管理器。