CORBA应用程序必须使用与ORB相同的语言来实现



我知道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++库)。

尝试实际使用该技术。

ORB是用哪种语言实现的并不重要,重要的是它提供了哪种语言绑定。对于语言L,您需要为语言L提供绑定的orb。通常,orb只为编写它们自己的语言提供绑定,但它们也可以为其他一些语言提供绑定。

在实现CORBA应用程序时可以使用几种方法,但总结起来,是的,ORB基础设施必须与应用程序实现使用相同的语言。

在Java和C++中,IDL编译器都会生成存根骨架,它们充当网络和程序之间的粘合剂。您提供CORBA对象的实现,通常继承自IDL编译器生成的类(骨架)。骨架以某种方式从客户端获取请求,然后调用您的实现。客户端的情况正好相反。

然后,骨架和存根都使用ORB提供的机制来远程调用服务器并回复响应,甚至包括在客户端和服务器位于不同机器中时建立网络连接。这个"魔术"是由ORB实现的,并且必须以库、函数集等形式存在于程序中,存根和骨架将使用这些库、函数组等来完成任务。

所以,每个程序都必须有某种ORB表示,才能与其他机器中的其他CORBA客户端和服务器进行交互。

然而,从逻辑的角度来看,ORB被视为一个层,它实际上无缝地连接客户端和服务器,因此,即使C++应用程序有一些用C++编写的ORB实现,Java实现也有一个用Java编写的ORB,通过标准协议(GIOP、IIOP)的魔力,它们也可以毫无问题地相互通信。

最新更新