java远程调用方法总结
前言:项目中使用到RMI、webService等远程调用方法,各方法demo输出,予以小结。- Java RMI (Remote Method Invocation)
- WebService,如jax-ws axis xfire cfx
- Httpinvoker
- Hessian
- Burlap
- EJB远程接口调用
1、Java RMI (Remote Method Invocation)
JavaRMI即远程方法调用,是jdk中内嵌的一个最底层的解决方案,它应用起来最轻量级,也最简单,它不需要任何的web服务器,直接在代码中绑定IP地址和相应的端口,适用于非常简单的小微应用。
优点:
- Full object support:RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。
- Cross platform:与java语言绑定,RMI只支持Java;
- Robust communications : 传输可靠
- Large objects:这个优点理解不深,粗略理解可传递大对象;
- Security for client and servers:RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全。RMI使用专门为保护系统免遭恶意小程序侵害而设计的安全管理程序。
- Distribution/updates of codes:远程接口实际上就是Java接口,面向接口编程可轻松实现功能代码的升级;
缺点:
- Java RMI only supports Java : Java语言的远程调用,两端的程序语言必须是Java实现;
- Requires non-standard port : RMI对服务器的IP地址和端口依赖很紧密,但是在开发的时候不知道将来的服务器IP和端口如何,但是客户端程序依赖这个IP和端口。这也是RMI的局限性之一。这个问题有两种解决途径:一是通过DNS来解决,二是通过封装将IP暴露到程序代码之外。
- Proprietary protocol by single vendor :RMI依赖于Java远程消息交换协议JRMP(Java Remote Messaging Protocol),该协议为java定制,要求服务端与客户端都为java编写;
- Requires RMI-lookup : 需要注册(不明白为什么属于缺陷) 。
RMI_Demo见附件。
2、WebService,如jax-ws axis xfire cfx
WebService是很常见的远程调用方法,其最大的优势就是跨平台语言,无论客户端是Java还是.NET都能轻松的调用。它采用SOAP(Simple Object Access Protocol)协议来封装序列化的消息,实际上是形成一个xml文件,可以通过http进行网络传输。WebService的客户端调用其实是使用生成文件的方式,只要知道发布接口的URL即可,而不需要额外传递jar包或者class文件。常见的WebService实现有jax-ws2.0、axis、xfire以及cfx,其中jax-ws2.0是jdk中封装好的,有一定的灵活性,但是这种把框架内嵌进入JVM其实对其可控性大大降低;axis有1.0和2.0两个版本,这个不是太了解;xfire和cfx其实是一个源头,xfire在07年停止开发,和另外一个框架合并形成了cfx,是一个比较受欢迎的WebService实现。
WebService 的主要目标是跨平台的可互操作性。
优点:
- 跨防火墙的通信:一般要访问的Web服务器以及要访问的Web Service的客户端很可能位于防火墙后面,都默认关闭其它端口而开放HTTP端口,而Web service 正是基于HTTP的,所以它可以穿越防火墙;
- 应用程序集成:可以实现不同应用程序和在不同系统平台上开发出来的应用程序之间通信。与RMI、DOCM、CORBA最大的不同就是:Web Service 以 SOAP 作为基本通信协议从而避免了复杂的协议转换;
- B2B 的集成:跨公司的商务交易集成通常叫做B2B 集成。通过WebService ,公司可以把关键的商务应用“ 暴露” 给指定的供应商和客户,只要把商务逻辑“ 暴露” 出来,成为WebService ,就可以让任何指定的合作伙伴调用这些商务逻辑,而不管他们的系统在什么平台上运行,使用什么 开发语言。这样就大大减少了花在B2B 集成上的时间和成本,让许多原本无法承受EDI 的中小企业也能实现B2B 集成。
缺点:
- 单机应用程序:单机应用程序只要与本机上的其他程序通讯,这种情况下使用WebService消耗太大,而且不会带来任何好处;
- 局域网的同构应用程序:简言之,还是性能问题。只要从应用程序结构的角度看,有别的方法比WebService更有效、更可行,那就不要用WebService。
3、Httpinvoker
Spring HTTP invoker 是 spring 框架中的一个远程调用模型,执行基于 HTTP 的远程调用(意味着可以通过防火墙),并使用 Java 的序列化机制在网络间传递对象。客户端可以很轻松的像调用本地对象一样调用远程服务器上的对象,这有点类似于 webservice ,但又不同于 webservice。
这里简单与WebService作对比来介绍Httpinvoker:
webservice | Http Invoker |
跨平台,跨语言 | 只支持 java 语言 |
支持 SOAP ,提供 wsdl | 不支持 |
结构庞大,依赖特定的 webservice 实现,如 xfire等 | 结构简单,只依赖于 spring 框架本身 |
4、Hessian
hessian是一种高效简洁的远程调用框架,它采用的是二进制RPC协议(Binary),具有轻量、传输量小、平台无关的特点,特别适合于目前网络带宽比较小的手机网络应用项目。类似于WebService,不过不使用SOAP协议,而是用Binary RPC协议,相比webservice而言更简单、快捷。它把协议报文封装到http封包中,通过HTTP信道传输。Hessian是通过servlet提供远程服务,完全使用动态代理来实现的,推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。
优点:
- 简单易用,面向接口,通过接口暴露服务,jar包只有200、300k,不需要配置防火墙;
- 效率高,复杂对象序列化速度仅次于RMI,简单对象序列化优于RMI,二进制传输;
- 多语言支持:wiki、Java、Flash/Flex、Python、C++、.NET C#、PHP、Ruby、Objective-C
- 可与Spring集成,配置简单,使用HessianServiceExporter提供bean服务。
缺点:
- 缺乏安全机制,传输没有加密处理;
- 异常机制不完善,总是报一些错误,错误原因也是千奇百怪,提示信息不足;
- 事务处理欠缺;
- 版本问题,服务器端和客户端通常要保持一致的版本,否则会出现莫名其妙的问题;
- 其支持的数据类型是有限制的,不支持复杂的对象。
5、Burlap
Burlap是将网络传输的对象转换为XML文本格式通过Http进行传递,支持的对象与Hessian相比更少。XML一般比二进制流占 用空间大,在网络上传递所需要的时间比二进制流长,XML的解析过程也会耗用更多的内存。Burlap可以穿透防火墙,而且由于传输的格式是XML文本, 可以与其他系统(比如.NET)集成,从某种程度来讲,Burlap是一种不标准的WebService。
好像不常用。
6、EJB远程接口调用
目前暂未接触EJB,没做过深入了解。
相关链接:
相关推荐
在提供的压缩包文件中,"三种方式(原始方式_spring_jndi)实现java远程调用(rmi)"包含了相关的示例代码,帮助开发者理解并实践这三种RMI实现方法。在MyEclipse或其他Java开发环境中导入这些代码,可以进行调试和...
### Java远程方法调用(RMI):深入解析与实践 #### 一、RMI概念与原理 Java远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算模型,允许一个Java虚拟机(JVM)上的对象通过网络...
- 对于Java接口远程调用,通常会封装成服务类,如`RemoteRequestServiceImpl.java`和`RemoteRequetService.java`中的实现。服务类中会包含执行HTTP请求的方法,可能包括设置请求头、处理响应等逻辑。 4. **使用库...
总结起来,基于动态代理的Java远程调用框架旨在克服RMI和EJB的一些缺点,提供更加简洁、灵活和高效的远程调用解决方案。它利用Java的动态代理特性,降低了分布式系统开发的复杂性,同时保持了高度的可扩展性和可定制...
Java远程调用Kettle说明与代码 Java远程调用Kettle是一种基于Java的ETL(Extract、Transform、Load)工具,能够对数据进行提取、转换、加载,以满足不同业务需求。Kettle提供了名为Carte的Web Server程序,也被称为...
Java远程方法调用(RMI)是Java平台标准版的一部分,它使得开发者能够在Java虚拟机(JVM)之间创建分布式应用程序。Java RMI允许对象调用远程JVM上运行的Java对象的方法,这些远程JVM可以位于不同主机上。RMI使用...
接下来,`getMemberAccountCount`方法实现了远程调用逻辑,通过`this.ref.invoke`方法调用了远程方法,并处理了可能抛出的异常。 #### 2. 客户端代码分析 客户端通过`Naming.lookup`方法获取远程服务的引用,然后...
总结来说,Java远程调用批处理文件结合TCP双向通信,可以实现高效且灵活的分布式系统管理。通过Java编程接口和网络通信技术,我们可以构建出能够自动化执行远程任务的应用,大大提高工作效率。而理解并熟练掌握这些...
总结来说,使用Akka和Java实现TCP远程调用涉及到以下关键知识点: 1. Akka Actor模型:理解Actor的异步消息传递和并发特性。 2. Akka ActorSystem:创建和配置ActorSystem以支持远程调用。 3. 配置文件:编写`...
Java远程方法调用(Remote Method Invocation,简称RMI)组件是一种关键的技术,它允许Java应用程序在不同的网络节点之间透明地调用对象的方法,仿佛这些对象都在本地进程中一样。这种技术在构建分布式系统、大型...
Java远程调用工具是开发过程中不可或缺的利器,尤其在处理分布式系统和服务之间的交互时。本文将深入探讨如何利用Java技术进行远程调用,特别是针对WebService和RESTful接口的调用,以及一个常用的工具——SoapUI。 ...
Java 远程方法调用(Java RMI,Remote Method Invocation)是Java平台提供的一种用于构建分布式应用程序的技术。它允许一个对象在某个Java虚拟机(JVM)上执行的方法调用另一个在不同JVM上的对象的方法,仿佛它们是...
基于java的开发源码-brap(Java远程调用框架 BRAP).zip 基于java的开发源码-brap(Java远程调用框架 BRAP).zip 基于java的开发源码-brap(Java远程调用框架 BRAP).zip 基于java的开发源码-brap(Java远程调用框架 BRAP)....
Java 远程方法调用(Remote Method Invocation,RMI)是一种在分布式环境中执行对象方法的技术。它允许一个Java应用程序调用运行在不同JVM(Java虚拟机)上的另一个对象的方法,就像是在本地调用一样。在Java RMI中...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间透明地调用对象的方法。在RMI架构中,客户端能够像调用本地对象一样调用远程服务器上的对象...
Java基于MCR的本地远程调用Matlab函数库
- **创建服务接口**:首先,你需要定义一个Java接口,这个接口将包含所有可供远程调用的方法。 - **实现服务接口**:创建一个类实现该接口,并提供具体的方法实现。 - **注册服务**:使用Hessian服务器端库(如...
RMI提供了一种有效的方式来解决分布式系统中的远程调用问题。 #### 二、RMI的核心概念 **1. 远程方法调用的体系结构** RMI的体系结构主要包括三个关键组件:客户端存根(Stub)、服务器端框架(Skeleton)和远程...