我知道CORBA允许用不同的编程语言实现多个对象,甚至可以在不同的计算节点上运行。然而,这是否也需要用两种不同的语言编写两个不同的ORB?
示例:节点A运行Java应用程序J1,而节点B运行C++应用程序C1。我是否必须为节点a获得一个"Java ORB",为节点B获得一个"C++ORB",或者所有/一些ORB是否可以与使用IDL映射的任何语言编写的应用程序交互?
如果有人能把我和一个明确说明这一点的消息来源联系起来,我将特别感激,正如我想引用的那样。我发现的最接近的是"程序员操纵结构或联合、使用代理进行远程调用或用服务类实现接口的方式在所有C++CORBA产品中完全相同,在所有Java CORBA产品中也完全相同,等等"。这让我觉得我需要两个ORB,但还不够明确。我基本上想知道我是否可以声明"由于ORB是用C++编写的,应用程序程序员也被限制使用C++"。
感谢
否。CORBA的关键在于它完全解耦了组件。
显然,您的应用程序需要使用可以与之交互的客户端库。您的ORB可能只提供一种语言的绑定,在这种情况下,您需要找到其他绑定,或者找到与它们互操作的方法(例如,如果使用Python,如果需要,您仍然可以使用C++库)。
尝试实际使用该技术。
在实现CORBA应用程序时可以使用几种方法,但总结起来,是的,ORB基础设施必须与应用程序实现使用相同的语言。
在Java和C++中,IDL编译器都会生成存根和骨架,它们充当网络和程序之间的粘合剂。您提供CORBA对象的实现,通常继承自IDL编译器生成的类(骨架)。骨架以某种方式从客户端获取请求,然后调用您的实现。客户端的情况正好相反。
然后,骨架和存根都使用ORB提供的机制来远程调用服务器并回复响应,甚至包括在客户端和服务器位于不同机器中时建立网络连接。这个"魔术"是由ORB实现的,并且必须以库、函数集等形式存在于程序中,存根和骨架将使用这些库、函数组等来完成任务。
所以,每个程序都必须有某种ORB表示,才能与其他机器中的其他CORBA客户端和服务器进行交互。
然而,从逻辑的角度来看,ORB被视为一个层,它实际上无缝地连接客户端和服务器,因此,即使C++应用程序有一些用C++编写的ORB实现,Java实现也有一个用Java编写的ORB,通过标准协议(GIOP、IIOP)的魔力,它们也可以毫无问题地相互通信。