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

时间:2012-01-25 13:12:19

标签: corba idl

我知道CORBA允许以不同的编程语言实现多个对象,甚至可以在不同的计算节点上运行。但是,这是否需要用两种不同的语言编写两个不同的ORB?

示例:节点A运行Java应用程序J1,而节点B运行C ++应用程序C1。我是否必须获得节点A的“Java ORB”和节点B的“C ++ ORB”,或者所有/某些ORB是否可以与使用IDL映射的任何语言编写的应用程序进行交互?

如果有人能将我明确地说明这一点,我会特别感激,因为我想引用它。我找到的最近的是"the way a programmer manipulates a struct or union, makes a remote call using a proxy or implements an interface with a servant class is exactly the same across all C++ CORBA products, is exactly the same across all Java CORBA products, and so on"。这让我觉得我需要两个ORB,但是不够明确。我基本上想知道我是否可以说“由于ORB是用C ++编写的,应用程序员也被限制使用C ++”。

由于

3 个答案:

答案 0 :(得分:3)

没有。 CORBA的重点在于它完全解耦了组件。

显然,您的应用程序需要使用可以与之交互的客户端库。你的ORB可能只提供一种语言的绑定,在这种情况下你需要找到其他绑定,或者找到一种与它们互操作的方法(例如,如果你使用Python,你仍然可以使用C ++库)。

尝试使用该技术。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

在实现CORBA应用程序时可以使用多种方法,但总结一下,是的,ORB基础结构必须与应用程序实现使用相同的语言。

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

然后,骨架和存根都使用ORB提供的机制来远程调用服务器并回复响应,甚至包括如果客户端和服务器位于不同的机器中则建立网络连接。这个“神奇”由ORB实现,并且必须以库,函数集等形式存在于您的程序中,存根和骨架将用于完成工作。

因此,每个程序都必须具有ORB的某种表示形式,以便与其他机器中的其他CORBA客户端和服务器进行交互。

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