`
hcx_2008
  • 浏览: 122104 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

RPC与RMI的区别以及jax-rpc、jax-ws和 axis、xfire的联系和区别

    博客分类:
  • J2EE
阅读更多
1. RPC 不支持对象, 采用http协议

2. RMI支持传输对象。采用tcp/ip 协议

3. RMI只限于JAVA语言,RPC跨语言

RPC和RMI的简单比较

  在RMI和RPC之间最主要的区别在于方法是如何别调用的。在RMI中,远程接口使每个远程方法都具有方法签名。如果一个方法在服务器上执行, 但是没有相匹配的签名被添加到这个远程接口上,那么这个新方法就不能被RMI客户方所调用。在RPC中,当一个请求到达RPC服务器时,这个请求就包含了 一个参数集和一个文本值,通常形成“classname.methodname”的形式。这就向RPC服务器表明,被请求的方法在为 “classname”的类中,名叫“methodname”。然后RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。这里 的参数类型是与RPC请求中的类型是匹配的。一旦匹配成功,这个方法就被调用了,其结果被编码后返回客户方。

分布式计算系统要求运行在不同地址空间不同主机上的对象互相调用。各种分布式系统都有自己的调用协议,如CORBA的IIOP(Internet InterORB Protocol), MTS的DCOM。那么EJB组件呢?在Java里提供了完整的sockets通讯接口,但sockets要求客户端和服务端必须进行应用级协议的编码交 换数据,采用sockets是非常麻烦的。
一个代替Sockets的协议是RPC(Remote Procedure Call), 它抽象出了通讯接口用于过程调用,使得编程者调用一个远程过程和调用本地过程同样方便。RPC 系统采用XDR来编码远程调用的参数和返回值。

但RPC 并不支持对象,而EJB构造的是完全面向对象的分布式系统,所以,面向对象的远程调用RMI(Remote Method Invocation)成为必然选择。采用RMI,调用远程对象和调用本地对象同样方便。RMI采用JRMP(Java Remote Method Protocol)通讯协议,是构建在TCP/IP协议上的一种远程调用方法。

RMI调用机制
RMI 采用stubs 和 skeletons 来进行远程对象(remote object)的通讯。stub 充当远程对象的客户端代理,有着和远程对象相同的远程接口,远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的。


jax-rpc、jax-ws和 axis、xfire的联系和区别

Sun 和 Java 标准

JAX-RPC 1.0 是 Java 方面的 Web 服务的原始标准。虽然 JAX-RPC 的设计思想是可以为实际 Web 服务实现使用不同的协议实现,但在实践中,仅将其用于 SOAP 服务。已经开发了多个不同的 JAX-RPC 实现,其中使用最广泛的可能就是 Apache 框架了,其次是 Sun Microsystems 作为 Java Web Services Developer Pack 的一部分分发的 Reference Implementation。

在开发 JAX-RPC 1.0 时,行业中的很多人认为 rpc/enc 样式的 SOAP 将成为最方便和易用的 Web 服务。JAX-RPC 1.0 规范要求对 rpc/enc 和 doc/lit 样式进行支持,但并不要求对很多模式特性进行支持。这样就带来了一个很不幸的副作用,使 doc/lit SOAP(此技术是基于模式的)事实上成了一个二流选项。

JAX-RPC 1.0 对 Web 服务功能的认识也有一定的局限。从其名称可以看出,最初的目的是为了支持使用 XML 的远程过程调用(Remote Procedure Call,RPC)操作。Java 当时已经有了一项面向 Java 应用程序间的 RPC 调用的现有技术,即远程方法调用(Remote Method Invocation,RMI)。该规范团队选择了在现有 RMI 接口上对 JAX-RPC 进行建模。只要通过请求-响应操作使用 rpc/enc SOAP,此模型就可相当接近地进行匹配,不过映射到异步操作或其他传输的效果并不理想。到 2003 年底,有关人员认识到,总要对 JAX-RPC 进行大幅修订,以处理这些问题和其他问题,因此 Sun 组成了一个专家组开始进行 JAX-RPC 2.0 规范的开发。


JAX-*

JAX-RPC 2.0 开发工作的主要目标是对各项标准进行更新,以支持 JAX-RPC 1.X 的强制要求(基于 Java 5 特性,如 Annotation 和泛型),改进消息传递支持(包括除 HTTP 外的异步操作和传输),并通过使用 JAXB 2.0 绑定替代 JAX-RPC 1.X 的简单(但局限性很强)内置绑定来改进模式支持。出于对更改范围的强调和其他原因,这个后续标准的名称更改成了 JAX-WS 2.0。JAX-WS 2.0 现在已经提供了预发布版本,其生产版本预计将在 2006 中期推出。

JAX-WS 2.0 成功实现了对 JAX-RPC 1.X 的各种期望,甚至还提供一些额外的功能,如有限的 REST 支持。因为 JAX-WS 2.0 大量使用了 Annotation 和其他 Java 5 特性(这样就不能使用较旧的 JVM),因而一些开发人员可能会在使用时遇到一些问题,但对于很多开发人员而言,依赖 Java 5 特性将是一大优势。一个较为突出的顾虑是,JAX-WS 2.0 并不支持 Web 服务配置的 Annotation 的任何后备选项,这样就可能限制该框架的灵活性和长期优势。

JAX-WS 2.0 和 JAXB 2.0 都在准备绑定到 J2SE 规范的发布 Java 5 版本中。将这些组件作为标准 JVM 安装的一部分将无疑增加对开发人员的吸引力,因为这将避免在各个应用程序中包含大量框架的需求。将大量框架包含在标准 JVM 中的缺点在于(除了会增加基本下载大小外),在需要进行错误修复时,可能会导致很难进行版本控制,就像已经发生在 JAXP 之类的组件身上的情况一样(这些组件已经采用了绑定的方式)。

向互操作性进发

JAX-WS 2.0 直接支持 XOP/MTOM,而并不是其他新的 WCF 技术。不过,在 Sun 声明的与 Microsoft 互操作性承诺中,他们宣布将开发 WCF 中包含的其他技术的 Java 开放源代码版本。这些开放源代码实现将作为大型项目“GlassFish”的一部分进行开发,此项目涵盖了作为 Sun 的应用服务器(包括 JAX-WS 2.0 和 JAXB 2.0 参考实现)的一部分使用的所有技术。

在这些新的开放源代码项目成形之前,我们需要拭目以待。在 Sun 所公布的时间表中,将在 2006 年中期提供一些可用的东西,因此在本系列的后续文章中将能够提供更多的详细信息。


Apache 方法

Apache 项目数年来已在 Web 服务方面进行了大量的工作,其主要精力放在 Java 平台开发上。Apache 当前的 Java SOAP Web 服务生产平台是第三代 Axis 框架。Axis 得到了广泛的使用,这既包括开发人员下载并直接使用,也包括将其作为 SOAP 引擎嵌入到若干不同的应用服务器中。Axis 通常被认为是使用最广泛的 Java SOAP Web 服务平台。

不过,Axis 也有一些缺点。首先,它是基于 JAX-RPC 1.0 标准设计的,而后者在很大程度上约束了 Axis 体系结构,限制了其灵活性。随着为了以 SOAP 处理核心为基础构建新技术而对扩展的需求的增加,这个有限的灵活性就越来越成问题了。同时,转向 doc/lit SOAP 服务也带来了对更好模式支持的需求,对 Axis 代码而言,这在当时是非常不实际的。到 2004 年中期,Axis 团队认为需要重新进行编写工作,要在进行重新编写工作中应用通过实现 Axis 获得的经验,并同时提供更好的灵活性,以便将来进行扩展。

“救世主”Axis2

Axis2 是 Axis 的后续版本。它设计为轻量 SOAP 处理引擎(尽管对于 JAX-WS 2.0,Axis2 也包含一些对 REST 的支持),可以采用很多方式进行扩展。与原来的 Axis 不同,Axis2 并不刻意对实现任何特定 API 进行约束(尽管一些 JAX-WS 2.0 支持级计划使用 Axis2 核心代码的包装)。Axis2 的开发工作已经持续了一年多,不久就将投入生产。

Axis2 最好的特性之一就是为 SOAP 消息使用的 AXIOM 对象模型。XML 对象模型存在的时间几乎和 XML 本身一样长,最早的版本是来自 W3C 的 DOM 标准。AXIOM 和其他 XML 对象模型不同的地方在于,它利用新的 XML 解析器提供的灵活性来允许按需构造对象模型。这意味着,只有为实际需要通过模型访问的 XML 文档部分构建对象模型才会带来性能损失。

另一个主要 Axis2 特性是对可插入数据绑定的支持。此特性允许您选择最简单的方式来处理 SOAP 文档的 XML 有效载荷,对生成的代码进行自定义,以使用所选择的方法。可能的选择包括,直接使用 AXIOM,使用与原来的 Axis 相似的简单数据绑定方法,或使用 XMLBeans、JiBX 或 JAXB 2.0 等专用数据绑定框架。

扩展 Axis2

尽管 Axis2 仍然在开发中,不过已经有了一系列在 Axis2 基础上实现 SOAP 扩展的项目。这些项目包括 WCF 所支持的所有主要技术以及 Microsoft 计划在加载项(即独立计价的)应用程序中的一些扩展。Axis2 的体系结构允许使用一个称为模块 的组件方便地开发此类扩展。

WS-Addressing 和 WS-Security 模块当前包含在基础 Axis2 分发中(在将来将可能作为独立部分下载,或者甚至成为独立的项目,因为这些模块和核心 Axis2 代码之间并没有紧密耦合关系)。WS-ReliableMessaging 支持正在通过 Sandesha 项目开发,而 WS-Trust 和 WS-SecureConversation 正在通过 WSS4J 项目开发(已经提供了 WS-Security 实现)。WS-AtomicTransaction 和 WS-Coordination 正在通过 Kandula 项目进行实现。



总结:由此可见,Axis对JAX-RPC进行了实现,但Axis2并没有完全实现JAX-WS规范。

JAX-RPC和JAX-WS是WebService的规范。

JAX-WS 2.0 是 JAX-RPC 1.1 的后续版本。

@see http://www.ibm.com/developerworks/cn/webservices/ws-jaxrpc/part1/
@see http://www.ibm.com/developerworks/cn/webservices/ws-tip-jaxwsrpc.html

axis和xfire是WebService的开源实现。

axis现在有两个版本axis1和axis2,xfire已经更名为cxf
@see ws.apache.org
@see cxf.apache.org
分享到:
评论

相关推荐

    RPC与RMI区别1

    RMI与RPC的主要区别在于调用方法的方式。在RMI中,每个远程方法都有其方法签名,这意味着服务端的远程接口必须明确地声明所有可被调用的方法及其参数。如果服务器添加了一个新方法,但没有在远程接口中声明对应的...

    分布式系统中的通信方式:RPC与RMI.pdf

    分布式系统中的通信机制是系统能否高效、稳定运行的关键,其中最为人熟知的两种通信方式分别是远程过程调用(RPC)和远程方法调用(RMI)。本文将详细阐述这两种技术的工作机制及其在分布式系统中的应用。 分布式...

    Java RPC和RMI代码实战

    Java RPC和RMI代码实战,有关键注释,为最简案例。Maven搭建,JDK8编译。 RPC体验:依次运行RpcProvider和RpcConsumer类。 RMI体验:RMITest中依次运行testServer和testClient方法。

    alibaba_dubbox_2.8.4.zip[jar、pom]

    dubbo-rpc-rmi dubbo-rpc-thrift dubbo-rpc-webservice dubbo-simple dubbo-test dubbo-test-benchmark dubbo-test-benchmark-api dubbo-test-benchmark-client dubbo-test-benchmark-server dubbo-test-examples ...

    dubbo-rpc-rmi-2.8.4-sources.jar

    java运行依赖jar包

    RPC-RMI实现加法的简单示例程序

    RPC(Remote Procedure Call)和RMI(Remote Method Invocation)是两种在分布式系统中实现跨网络对象调用的技术,常用于构建分布式应用。本示例程序是关于如何利用RPC和RMI来实现一个简单的加法运算,这对于理解这...

    Spring 实现远程访问详解——rmi

    6. JAX-WS:Spring通过JAX-WS为远程Web服务提供支持(the successor of JAX-RPC, as introduced in Java EE 5 and Java 6)。 7. JMS:远程访问通过类JmsInvokerServiceExporter和JmsInvokerProxyFactoryBean使用JMS的...

    RPC_RMI.zip_rpc

    5. **优势与局限**:讨论RPC和RMI相对于其他通信方式的优点,如简化编程模型、提高效率,以及可能遇到的问题,如网络延迟、安全性等。 6. **应用领域**:描述RPC和RMI在Web服务、分布式数据库、网格计算等领域的应用...

    rmi原理-chn-pdf

    - **RMI-IIOP**:RMI-IIOP允许RMI与CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)协议进行互操作,扩大了RMI的适用范围。 - **EJB**:在J2EE体系中,EJB(Enterprise JavaBeans)...

    Java远程通信技术——Axis实战.doc

    Java中,有多种远程通信架构,如RMI、CORBA、JAX-RPC、JAX-WS、Axis等,用于实现跨平台的数据交换。 **一、Axis简介** Axis是Apache软件基金会的一个开源项目,专门用于构建和部署Web服务。它基于SOAP(Simple ...

    Hessian RPC-RMI技术 整合Structs Spring Hibernate Ibatis

    本文主要讨论的是如何将Hessian RPC与RMI技术整合到Structs、Spring、Hibernate和Ibatis这四个关键的Java开发框架中,以构建一个高效、灵活的分布式应用程序。 1. **Hessian配置说明**: Hessian的配置通常涉及...

    rmi和rpc Demo

    在开发分布式系统时,理解RMI和RPC的工作原理以及如何选择合适的工具至关重要。RMI适合于Java生态系统,而RPC更适合跨语言的场景。在实际项目中,选择哪种技术取决于项目需求、团队技能和性能要求。

    dubbo-rpc-rmi-2.8.4.jar

    java运行依赖jar包

    RMI-EA-Pro-V2.6-demo_mt4_

    《RMI-EA-Pro-V2.6-demo_mt4_:智能交易系统在Metatrader 4平台的应用详解》 RMI EA Pro V2.6 (demo) 是一款专为MetaTrader 4(MT4)交易平台设计的智能交易系统(Expert Advisor,简称EA),其主要功能是自动化...

    dubbo_rpc_hession_rmi

    总结,"dubbo_rpc_hession_rmi"这个主题涵盖了Dubbo作为RPC框架的核心概念,Hessian作为RPC协议的实现,以及RPC基础理论。通过学习这些内容,开发者可以更好地理解和应用分布式服务框架,提高系统的可扩展性和可维护...

    RMI-File-Submission-System-master.zip_java_submission_tornkaj

    《基于RMI的Java提交系统详解》 在Java编程领域,远程方法调用(Remote ...开发者可以从中学习到RMI的使用、远程对象的设计、网络通信的处理以及文件传输优化等方面的知识,对于提升Java分布式应用开发能力大有裨益。

    java-RMI-math-operator-server-client.zip_Math Class

    为了使RMI工作,还需要设置一些环境变量,如`JAVA_HOME`和`CLASSPATH`,以及确保RMI的端口(默认是1099)没有被其他进程占用。此外,RMI应用通常需要在JVM启动时添加特定的JVM参数,例如`-Djava.rmi.server.hostname...

    rmi-xlr-mips-program-manual

    这份文档,XLR_Programmers_Manual_Revision_2.01.pdf,提供了全面的指导,帮助开发者理解和利用RMI多核MIPS处理器的特性进行高效编程。 1. **RMI多核MIPS架构** RMI(Remote Microprocessor Interface)是一家...

    RPC、RMI、SOAP的区别详解

    RMI与RPC之间的区别还表现在它们的调用机制和协议上。RMI采用stubs和skeletons来进行远程对象的通信,stub充当远程对象的客户端代理。而RPC通常采用客户端/服务器方式,通过请求/响应模式,发送请求到服务器端执行...

    RMI-remote-file-transfer.rar_remote_rmi file transfer

    Java RMI(Remote Method Invocation,远程方法调用)是一种在分布式环境中进行对象间通信的技术,它允许...通过深入学习和实践这个项目,开发者可以更好地理解和掌握Java RMI的工作机制,以及如何在实际场景中应用它。

Global site tag (gtag.js) - Google Analytics