CORBA 和 RMI 的区别

Posted

技术标签:

【中文标题】CORBA 和 RMI 的区别【英文标题】:Differen between CORBA and RMI 【发布时间】:2013-03-04 16:21:05 【问题描述】:

除了inoutinout存在的问题,我很清楚CORBA和RMI的区别。

CORBA 使用 IDL 语言描述接口,定义的方法中的参数有关键字:inoutinout。它们的含义如下:

in:参数从操作的调用者传递给对象。 out:参数从对象传递给调用者。 inout:参数双向传递。

我的问题:为什么关键字(inoutinout)在 CORBA 中是必需的,而在 JAVA/RMI 中却不是必需的。

【问题讨论】:

RMI中只有参数。 Java中只有in参数。 【参考方案1】:

这只是一个设计决定。它们设计的主要区别在于 CORBA 被设计为独立于平台和编程语言,而 RMI 是专门为 Java 编程语言设计的。

许多编程语言都有自己的方式来表达inoutinout 参数方向,在这些语言中,CORBA IDL 有其直接的等价物。在其他语言(例如 Java)中,这些构造必须使用复杂的包装结构来实现。

Java 编程语言没有outinout 参数(虽然可以通过创建简单的值包装类来实现),所有参数都通过值(对于值类型)或引用传递in (对于参考类型)。而且由于 Java 本身不支持语言级别的参数方向,因此在 RMI 中也没有必要这样做。

【讨论】:

【参考方案2】:

但在 JAVA/RMI 中不是必需的。

它们在 Java 中不可用,更不用说 Java RMI。设计师决定通过价值传递一切。

【讨论】:

这些关键字在 IDL 中不是可选的。如果您在 IDL 接口中编写具有参数的函数,则必须指定 in、out 或 inout。

以上是关于CORBA 和 RMI 的区别的主要内容,如果未能解决你的问题,请参考以下文章

CORBA、RMI 和 SOA

Corba 的 RMI 是不是有任何“远程异常”?

将 rmi 接口转换为 CORBA .idl

JMS 和 CORBA 的区别?

使用 java RMI 和 CORBA 的分布式计算

通过 http 对 RMI 或 Corba 网络流量进行网络检查?