corba,java rmi 框架和dcom/com的异同

下次自动登录
现在的位置:
& 综合 & 正文
RMI, RPC, CORBA区别
RMI 和 RPC均可以均提供远程方法访问的基础通信和参数引用要求的串行化机制,RPC和RMI之间的一个重要差别是RPC用快速而不够可靠的UDP协议,RMI用低速而可靠的TCP/IP协议。另外 RMI 调用远程对象方法,允许方法返回 Java 对象以及基本数据类型。而 RPC 不支持对象的概念,传送到 RPC 服务的消息由外部数据表示 (External Data Representation, XDR) 语言表示,这种语言抽象了字节序类和数据类型结构之间的差异。只有由 XDR 定义的数据类型才能被传递, RPC 不允许传递对象。可以说 RMI 是面向对象方式的 Java
RPC 。 RPC是有Sun提出的。
CORBA被设计成一个能供所有使用的一个开放性说明,就是说一个机器上的Java客户可以要求另一个用SmallTalk或C++的机器服务。为了适应语言独立性,CORBA采用了非常通用的标准作为其接口。在不同的语言中,远程调用、签名和对象的引入有各自不同的定义,所以CORBA必须尽可能的中立和开放。正是这种通用性是CORBA的一个弱点。当开发人员都采用CORBA时,他们要用一种新的标准定义语言接口,它要求开发者学习新的编程接口,从而减小了远程模型的透明性。
RMI是为仅在Java对Java的分布式计算中而开发的。远程调用的标准是为了Java和应用Java的自然Java签名和调用而开发的,这使得RMI对Java的开发者相当透明而且易于实现。RMI用Java语言紧密集成从而同CORBA相比能够提供非常好的容错能力及对异常的处理。尽管Java的RMI标准不像CORBA那样语言独立,但Java本身是一个独立的平台,这就使RMI在跨平台的分布软件开发中是一个很好的选择。
它是一个用于CORBA 2.0及兼容平台上的协议。这个协议的最初阶段是要建立以下几个组件部分:一个IIOP到HTTP的网关,使用这个网关可以让CORBA客户访问WWW资源;一个HTTP到IIOP的网关,通过这个网关可以访问CORBA资源;一个为IIOP和HTTP提供资源的服务器,一个能够将IIOP作为可识别协议的浏览器。
Java 消息服务 ( Java Messaging Service, JMS ) 是一种允许应用创建、发送、接受和读取消息的Java API 。 JMS 与 RMI 的区别在于,采用 JMS 服务,对象是在物理上被异步从网络的某个 JVM 上直接移动到另一个 JVM 上。而 RMI 对象是绑定在本地 JVM 中,只有函数参数和返回值是通过网络传送的。
RMI 和 CORBA 常被视为相互竞争的技术,因为两者都提供对远程分布式对象的透明访问。但这两种技术实际上是相互补充的,一者的长处正好可以弥补另一者的短处。 RMI 和 CORBA 的结合产生了 RMI-IIOP, RMI-IIOP 是企业服务器端 Java 开发的基础。
1997 年, IBM 和 Sun Microsystems 启动了一项旨在促进 Java 作为企业开发技术的发展的合作计划。两家公司特别着力于如何将 Java 用作服务器端语言,生成可以结合进现有体系结构的企业级。所需要的就是一种远程传输技术,它兼有 Java 的 RMI ( Remote Method Invocation ,远程方法调用)较少的资源占用量和更成熟的 CORBA ( Common Object
Request Broker Architecture ,公共对象请求代理体系结构)技术的健壮性。出于这一需要, RMI-IIOP问世了,它帮助将 Java 语言推向了目前服务器端企业开发的主流语言的领先地位 。
DCOM 是从 COM 改造过来的, COM 这一技术部分是作为规范,定义了对象实现的二进制标准,用于单机上应用之间的通信,对象实现与使用的语言无关。 DCOM 是 COM 的分布式扩展,在 DCE RPC 之上构造对象的远程过程调用层支持对远程对象的访问。一个 DCOM 对象是支持一个或多个接口的组件。DCOM 对象不支持对象 ID ,因此,客户程序不能与某个特定的对象发生联系。
&&&&推荐文章:
【上篇】【下篇】RMI与CORBA在分布式编程中的异同_论文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
RMI与CORBA在分布式编程中的异同
|0|0|文档简介
中国最大最早的专业内容网站|
总评分0.0|
&&Java远程方法调用(RMI)机制和公用对象请求代理体系(COKBA)是最重要和使用最广泛的两种分布式对象系统。每个系统都有其特点和短处。一个项目如果要从这两种分布式机制中选用一个,往往难以抉择。本文概括地介绍了RMI和CORBA,并对这两种机制进行了简单比较。
试读已结束,如果需要继续阅读或下载,敬请购买
定制HR最喜欢的简历
你可能喜欢
您可以上传图片描述问题
联系电话:
请填写真实有效的信息,以便工作人员联系您,我们为您严格保密。用户名:leizhimin
文章数:732
评论数:2726
注册日期:
阅读量:1297
阅读量:3317
阅读量:440885
阅读量:1127275
51CTO推荐博文
Java RMI之HelloWorld篇
Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。
Java RMI不是什么新技术(在Java1.1的时代都有了),但却是是非常重要的底层技术。
大名鼎鼎的EJB都是建立在rmi基础之上的,现在还有一些开源的远程调用组件,其底层技术也是rmi。
在大力鼓吹Web Service、SOA的时代,是不是每个应用都应该选用笨拙的Web Service组件来实现,通过对比测试后,RMI是最简单的,在一些小的应用中是最合适的。
下面通过一个简单的例子来说明RMI的原理和应用,下面这个例子是一个简单HelloWorld,但已涵盖RMI的核心应用与开发模式。
/** * Created by IntelliJ IDEA. * User: leizhimin * Date:
21:50:02 * 定义一个远程接口,必须继承Remote接口,其中需要远程调用的方法必须抛出RemoteException异常 */ public interface IHello extends Remote { &&&&/** &&&& * 简单的返回“Hello World!"字样 &&&& * @return 返回“Hello World!"字样 &&&& * @throws java.rmi.RemoteException &&&& */ &&&&public String helloWorld() throws RemoteE &&&&/** &&&& * 一个简单的业务方法,根据传入的人名返回相应的问候语 &&&& * @param someBodyName&&人名 &&&& * @return 返回相应的问候语 &&&& * @throws java.rmi.RemoteException &&&& */ &&&&public String sayHelloToSomeBody(String someBodyName) throws RemoteE }
/** * Created by IntelliJ IDEA. * User: leizhimin * Date:
21:56:47 * 远程的接口的实现 */ public class HelloImpl extends UnicastRemoteObject implements IHello { &&&&/** &&&& * 因为UnicastRemoteObject的构造方法抛出了RemoteException异常,因此这里默认的构造方法必须写,必须声明抛出RemoteException异常 &&&& * &&&& * @throws RemoteException &&&& */ &&&&public HelloImpl() throws RemoteException { &&&&} &&&&/** &&&& * 简单的返回“Hello World!"字样 &&&& * &&&& * @return 返回“Hello World!"字样 &&&& * @throws java.rmi.RemoteException &&&& */ &&&&public String helloWorld() throws RemoteException { &&&&&&&&return "Hello World!"; &&&&} &&&&/** &&&& * 一个简单的业务方法,根据传入的人名返回相应的问候语 &&&& * &&&& * @param someBodyName 人名 &&&& * @return 返回相应的问候语 &&&& * @throws java.rmi.RemoteException &&&& */ &&&&public String sayHelloToSomeBody(String someBodyName) throws RemoteException { &&&&&&&&return "你好," + someBodyName + "!"; &&&&} }
/** * Created by IntelliJ IDEA. * User: leizhimin * Date:
22:03:35 * 创建RMI注册表,启动RMI服务,并将远程对象注册到RMI注册表中。 */ public class HelloServer { &&&&public static void main(String args[]) { &&&&&&&&try { &&&&&&&&&&&&//创建一个远程对象 &&&&&&&&&&&&IHello rhello = new HelloImpl(); &&&&&&&&&&&&//本地主机上的远程对象注册表Registry的实例,并指定端口为8888,这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上 &&&&&&&&&&&&LocateRegistry.createRegistry(8888); &&&&&&&&&&&&//把远程对象注册到RMI注册服务器上,并命名为RHello &&&&&&&&&&&&//绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略,下面两种写法都是正确的) &&&&&&&&&&&&Naming.bind("rmi://localhost:8888/RHello",rhello); //&&&&&&&&&&&&Naming.bind("//localhost:8888/RHello",rhello); &&&&&&&&&&&&System.out.println("&&&&&INFO:远程IHello对象绑定成功!"); &&&&&&&&} catch (RemoteException e) { &&&&&&&&&&&&System.out.println("创建远程对象发生异常!"); &&&&&&&&&&&&e.printStackTrace(); &&&&&&&&} catch (AlreadyBoundException e) { &&&&&&&&&&&&System.out.println("发生重复绑定对象异常!"); &&&&&&&&&&&&e.printStackTrace(); &&&&&&&&} catch (MalformedURLException e) { &&&&&&&&&&&&System.out.println("发生URL畸形异常!"); &&&&&&&&&&&&e.printStackTrace(); &&&&&&&&} &&&&} }
/** * Created by IntelliJ IDEA. * User: leizhimin * Date:
22:21:07 * 客户端测试,在客户端调用远程对象上的远程方法,并返回结果。 */ public class HelloClient { &&&&public static void main(String args[]){ &&&&&&&&try { &&&&&&&&&&&&//在RMI服务注册表中查找名称为RHello的对象,并调用其上的方法 &&&&&&&&&&&&IHello rhello =(IHello) Naming.lookup("rmi://localhost:8888/RHello"); &&&&&&&&&&&&System.out.println(rhello.helloWorld()); &&&&&&&&&&&&System.out.println(rhello.sayHelloToSomeBody("熔岩")); &&&&&&&&} catch (NotBoundException e) { &&&&&&&&&&&&e.printStackTrace(); &&&&&&&&} catch (MalformedURLException e) { &&&&&&&&&&&&e.printStackTrace(); &&&&&&&&} catch (RemoteException e) { &&&&&&&&&&&&e.printStackTrace();&& &&&&&&&&} &&&&} }
运行RMI服务端程序:
650) this.width=650;" onclick='window.open("/viewpic.php?refimg=" + this.src)' alt="" src="/attachment/453750.png" border="0" />
运行RMI客户端程序:
650) this.width=650;" onclick='window.open("/viewpic.php?refimg=" + this.src)' alt="" src="/attachment/504000.png" border="0" />
从上面的过程来看,RMI对服务器的IP地址和端口依赖很紧密,但是在开发的时候不知道将来的服务器IP和端口如何,但是客户端程序依赖这个IP和端口。
这也是RMI的局限性之一。这个问题有两种解决途径:一是通过DNS来解决,二是通过封装将IP暴露到程序代码之外。
RMI的局限性之二是RMI是Java语言的远程调用,两端的程序语言必须是Java实现,对于不同语言间的通讯可以考虑用Web Service或者公用对象请求代理体系(CORBA)来实现。
本文出自 “” 博客,转载请与作者联系!
了这篇文章
附件下载:  
类别:┆阅读(0)┆评论(0)
11:32:08 18:46:45 17:41:02 17:41:25 17:27:24 17:05:40 21:21:57 20:34:02 15:30:37 11:38:39 00:19:29 12:15:02 09:27:40 16:11:16
请输入验证码:天极传媒:天极网全国分站
您现在的位置: >>
用RMI和CORBA进行分布式Java编程
  远程方法调用(RMI)机制和公用对象请求代理体系(CORBA)是最重要 和使用最广泛的两种分布式对象系统。每个系统都有其特点和短处。它们在行 业中被用于从电子交易到保健医疗的各个领域。一个项目如果要从这两种分布式 机制中选用一个,往往难以抉择。本文概括地介绍了RMI和CORBA,更重要的是, 它将介绍如何开发一个有用的应用程序,用于从远程主机下载。
  客户机/模型是分布式计算的一种形式,在这种形式中,一个程序(客 户机)与另一个程序(服务器)通讯以便交换信息。在这种模型中,客户机和服 务器通常都说同样的语言--也就是说客户机和服务器能理解同一个协议--这 样它们才能通讯。
  虽然客户机/服务器模型的实现方式多种多样,但典型做法是使用底层套接字。 使用套接字开发客户机/服务器系统意味着,我们必须设计一个协议,也就是客户 机和服务器都认识的一组命令集,通过这些命令它们就能通讯了。举例来说, HTTP协议中提供了一个名为GET的方法,所有Web服务器都必须实现这个方法,所 有Web客户机(浏览器)都必须使用这个方法,才能获取文档。
  分布式对象模型  基于分布式对象的系统是一组对象的集合,这些对象以一种明确定义封装的接 口把服务的请求者(客户机)和服务的提供者(服务器)分隔开。换言之,客户 机从服务的实现中分离出来,变成数据的呈现和可执行代码。这就是基于分布式 对象的模型与纯粹的客户机/服务器模型的主要区别之一。
  在基于分布式对象的模型中,客户机向对象发送消息,然后对象解释该消息以 便决定要执行什么服务。这项服务,也就是方法,可以选择是让对象还是让代理 来执行。Java远程方法调用(RMI)和公用对象请求代理体系(CORBA)就是这种 模型的例子。
  RMI  RMI是一个分布式对象系统,它使你能够轻松地开发出分布式Java应用程序。 在RMI中开发分布式应用程序比用套接字开发要简单,因为不需要做设计协议这种 很容易出错的工作。在RMI中,开发者会有一种错觉,似乎是从本地类文件调用的 本地方法,其实参数传送给了远程目标,目标解释参数后再把结果发回给调用方。
  RMI应用程序初步  使用RMI开发分布式应用程序包括以下步骤:
  定义一个远程接口   实现这个远程接口   开发服务器   开发客户机   生成存根和基干,启动RMI注册表、服务器和客户机   下面我们将通过开发一个文件传输程序来实践这些步骤。
  范例: 文件传输程序  这个应用程序允许客户机从远程主机上传送(即下载)任何类型的文件(纯 文本或二进制文件)。第一步是定义一个远程接口,这个接口规定了服务器所提 供方法的信号,客户机将调用这些方法。
1(作者:责任编辑:方舟)
天极新媒体&最酷科技资讯扫码赢大奖
* 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!
笔记本手机数码家电1626人阅读
技术文章收藏(2)
通信协议(1)
RMI 和 RPC均可以均提供远程方法访问的基础通信和参数引用要求的串行化机制,RPC和RMI之间的一个重要差别是RPC用快速而不够可靠的UDP协议,RMI用低速而可靠的TCP/IP协议。另外&RMI&调用远程对象方法,允许方法返回&Java&对象以及基本数据类型。而&RPC&不支持对象的概念,传送到&RPC&服务的消息由外部数据表示&(External Data Representation, XDR)&语言表示,这种语言抽象了字节序类和数据类型结构之间的差异。只有由&XDR&定义的数据类型才能被传递,&RPC&不允许传递对象。可以说&RMI&是面向对象方式的&Java
RPC&。 RPC是有Sun提出的。
CORBA被设计成一个能供所有编程语言使用的一个开放性说明,就是说一个机器上的Java客户可以要求另一个用SmallTalk或C++的机器服务。为了适应语言独立性,CORBA采用了非常通用的标准作为其接口。在不同的语言中,远程调用、签名和对象的引入有各自不同的定义,所以CORBA必须尽可能的中立和开放。正是这种通用性是CORBA的一个弱点。当开发人员都采用CORBA时,他们要用一种新的标准定义语言接口,它要求开发者学习新的编程接口,从而减小了远程模型的透明性。
RMI是为仅在Java对Java的分布式计算中而开发的。远程调用的标准是为了Java和应用Java的自然Java签名和调用而开发的,这使得RMI对Java的开发者相当透明而且易于实现。RMI用Java语言紧密集成从而同CORBA相比能够提供非常好的容错能力及对异常的处理。尽管Java的RMI标准不像CORBA那样语言独立,但Java本身是一个独立的平台,这就使RMI在跨平台的分布软件开发中是一个很好的选择。
它是一个用于CORBA 2.0及兼容平台上的协议。这个协议的最初阶段是要建立以下几个组件部分:一个IIOP到HTTP的网关,使用这个网关可以让CORBA客户访问WWW资源;一个HTTP到IIOP的网关,通过这个网关可以访问CORBA资源;一个为IIOP和HTTP提供资源的服务器,一个能够将IIOP作为可识别协议的浏览器。
Java&消息服务&( Java Messaging Service, JMS )&是一种允许应用程序创建、发送、接受和读取消息的Java API&。&JMS&与&RMI&的区别在于,采用&JMS&服务,对象是在物理上被异步从网络的某个&JVM&上直接移动到另一个&JVM&上。而&RMI&对象是绑定在本地&JVM&中,只有函数参数和返回值是通过网络传送的。
RMI&和&CORBA&常被视为相互竞争的技术,因为两者都提供对远程分布式对象的透明访问。但这两种技术实际上是相互补充的,一者的长处正好可以弥补另一者的短处。&RMI&和&CORBA&的结合产生了&RMI-IIOP,&RMI-IIOP&是企业服务器端&Java&开发的基础。
1997&年,&IBM&和&Sun Microsystems&启动了一项旨在促进&Java&作为企业开发技术的发展的合作计划。两家公司特别着力于如何将&Java&用作服务器端语言,生成可以结合进现有体系结构的企业级代码。所需要的就是一种远程传输技术,它兼有&Java&的&RMI&(&Remote Method Invocation&,远程方法调用)较少的资源占用量和更成熟的&CORBA&(&Common Object
Request Broker Architecture&,公共对象请求代理体系结构)技术的健壮性。出于这一需要,&RMI-IIOP问世了,它帮助将&Java&语言推向了目前服务器端企业开发的主流语言的领先地位&。
DCOM&是从&COM&改造过来的,&COM&这一技术部分是作为规范,定义了对象实现的二进制标准,用于单机上应用之间的通信,对象实现与使用的语言无关。&DCOM&是&COM&的分布式扩展,在&DCE RPC&之上构造对象的远程过程调用层支持对远程对象的访问。一个&DCOM&对象是支持一个或多个接口的组件。DCOM&对象不支持对象&ID&,因此,客户程序不能与某个特定的对象发生联系。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:111971次
积分:1520
积分:1520
排名:千里之外
原创:30篇
转载:11篇
评论:61条
(1)(2)(1)(3)(3)(3)(1)(8)(2)(1)(1)(2)(3)(3)(2)(6)

我要回帖

更多关于 java.rmi.remote 的文章

 

随机推荐