企业中的 RMI-IIOP

2008-02-23 10:14:33来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

RMI 和 CORBA 常被视为相互竞争的技术,因为两者都提供对远程分布式对象的透明访问。但这两种技术实际上是相互补充的,一者的长处正好可以弥补另一者的短处。RMI 和 CORBA 的结合产生了 RMI-IIOP,RMI-IIOP 是企业服务器端 Java 开发的基础。在本文中,Java 开发者 Damian Hagge 简要介绍了 RMI-IIOP,然后为您展示如何构建和运行一个简单的、基于 Java 的 RMI-IIOP 客户机/服务器应用程序。请亲自看看 RMI 能在 IIOP 上工作得多么好。

1997 年,IBM 和 Sun Microsystems 启动了一项旨在促进 Java 作为企业开发技术的发展的合作计划。两家公司特别着力于如何将 Java 用作服务器端语言,生成可以结合进现有体系结构的企业级代码。所需要的就是一种远程传输技术,它兼有 Java 的 RMI(Remote Method Invocation,远程方法调用)较少的资源占用量和更成熟的 CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)技术的健壮性。出于这一需要,RMI-IIOP 问世了,它帮助将 Java 语言推向了目前服务器端企业开发的主流语言的领先地位。

在本文中,我将简要介绍 RMI-IIOP,目标是使您能开始在企业开发解决方案中使用这一技术。要解释 RMI-IIOP 究竟是什么,我认为提供一些关于 CORBA 和 RMI 的信息是重要的,这些信息您在各个技术的典型介绍中可能找不到。如果您对 CORBA 或 RMI 的基础知识不熟悉,我建议您在往下读之前先阅读一些介绍性信息。请参阅参考资料,那里挑选了一些文章和教程。

在我具体讨论 RMI-IIOP 之前,我们将先看一下 CORBA 和 RMI 用来对请求进行数据编入的机制。CORBA 将是我们的主要示例,因为 RMI-IIOP 数据编入是建立在 CORBA 传输协议(IIOP)的基础上的。我们将回顾一下该传输协议和 ORB(object request broker,对象请求代理)在网络上发送请求、定位远程对象和传输对象方面的基本功能。

远程对象传输
对 CORBA 请求进行数据编入是通过使用 IIOP 协议做到的。简言之,IIOP 将以标准化格式构造的任何 IDL(Interface Definition Language,接口定义语言)的元素表示为一系列字节。那就假设有一个 Java 客户机正在将一个 CORBA 请求分派到 C 服务器吧。客户机应用程序以 Java 接口的形式拥有远程对象的引用,并调用该接口的一个操作。本质上是,接口调用它对该操作的相应实现,这个实现将位于存根(stub)(存根是您将已经用 idlj 从 IDL 生成了的)。

存根把方法调用分派到 ORB 中,ORB 由两部分组成:客户机 ORB 和服务器 ORB。客户机 ORB 的职责是对请求进行数据编入,放到网络上,传往特定位置。服务器 ORB 的职责是侦听从网络上传下来的请求,并将这些请求转换成语言实现能够理解的方法调用。要了解对 CORBA ORB 的角色的更深入讨论,请参阅参考资料部分。

存根分派了方法调用之后,客户机 ORB 将请求和所有参数转换成标准化字节格式,在这种情况中是 IIOP。接着,请求通过导线被发送到服务器 ORB,服务器 ORB 应该正在侦听传入请求。服务器端 ORB 将读进数据的字节并将请求转换成对 C 服务器实现有意义的东西。C 服务器方法将执行它的功能(即调用所请求的方法)并使用相同的机制通过 IIOP 将结果返回给客户机。

RMI 以类似的方式处理请求,但是它使用 JRMP(Java Remote Messaging Protocol,Java 远程消息传递协议)作为其传输协议。当然,RMI 传输还涉及 Java 对象的序列化。

CORBA 和 RMI 的差异
  • CORBA 运行在 IIOP 协议之上;RMI 使用 JRMP。
  • CORBA 是独立于语言的;RMI 是纯粹 Java 到 Java 的。
  • RMI 使用 JNDI 定位远程对象;CORBA 使用 CosNaming。
  • RMI 会将对象序列化;CORBA 则不然。

远程对象定位
CORBA 使用 CosNaming 命名服务定位远程对象。CosNaming 为名称服务器保存对 CORBA 服务器进程的绑定(或引用)提供了一个框架。当 CORBA 客户机向名称服务发送 CosNaming 请求,请求给定名称的服务器进程时,名称服务返回该进程的可互操作对象引用(interoperable object reference(IOR))。接着,客户机使用该 IOR 直接与服务器进程通信。

IOR 包含关于服务器进程的信息,例如服务器进程的位置。CosNaming 服务的缺点之一是,IOR 对人类而言是难以看懂的 — 至少对我们这些没有电子大脑的人来说是这样。相反地,RMI 对用户则要友好一些。它使用运行在 JNDI 之上的注册中心(与命名服务极为相似)来定位远程对象。RMI 注册中心使用 Java Reference 对象(它由若干个 RefAddr 对象组成)来识别和定位远程对象。这些 Java 对象比 IOR 对用户更加友好。

不久前,COBRA 将可互操作命名服务(Interoperable Naming Service(INS))结合进了它的对象-定位(object-location)模式。INS 在 CosNaming 上运行,使用人类可以阅读的 URL 作它的对象位置。INS 不使用命名服务;相反地,它将调用直接发送到指定的 URL。请参阅参考资料了解关于 INS 的更多信息。

RMI 对 CORBA
那么,哪一个更好呢:是 CORBA 还是 RMI?答案取决于您想做什么。CORBA 是一个运行在业界标准的第三或第四代协议上的、经过试验和测试的大体系结构。如果考虑到 CORBA 提供的所有附件(例如:事务处理、安全拦截器、事件通道,还有更多)的话,则 CORBA 看来是企业应用程序的解决方案。CORBA 的最大缺点是它很复杂。要熟练使用 CORBA,开发者通常要经历陡峭的培训曲线。

相反地,RMI 相当容易学习。创建一个客户机/服务器实现,绑定到注册中心和远程对象,使用 RMI 调用和/或接收请求都相当简单。RMI 的资源占用量也比 CORBA 小得多,因为 JRMP 是开销比 IIOP 小得多的协议。但是,RMI 缺乏 CORBA 的工业级的附件,而且是纯基于 Java 的机制。那么,我们真正需要的就是 RMI 的灵活性和易用性以及 CORBA 的企业就绪性,对吗?那就开始讨论 RMI-IIOP 吧。

为什么是 RMI-IIOP?
  • RMI-IIOP 兼有 CORBA 的强度和 RMI 的灵活性。
  • 开发者很容易就可以使用 RMI-IIOP,RMI-IIOP 也易于集成到多数企业基础架构中。

    标签:

    版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:JDK5.0 Meta-Data 再起革命

下一篇:读者写者问题之写者优先(java)