RMI(Remote Method Invocation,远程方法调用)

RMI(Remote Method Invocation,远程方法调用)

RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。

      RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。JRMP是专为Java的远程对象制定的协议。因此,Java RMI具有Java的"Write Once,Run Anywhere"的优点,是分布式应用系统的百分之百纯Java解决方案。用Java RMI开发的应用系统可以部署在任何支持JRE(Java Run Environment Java,运行环境)的平台上。但由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。不能与用非Java语言书写的对象进行通信。

Java Remote Method Invocation ( RMI -- Java远程方法调用)允许您使用Java编写分布式对象。本文将介绍RMI的优点以及如何将其连接到现有的和原有的系统中,以及与用Java 编写的组件的连接。

RMI为采用Java对象的分布式计算提供了简单而直接的途径。这些对象可以是新的Java对象,也可以是围绕现有API的简单的Java包装程序。Java体现了“编写一次就能在任何地方运行的模式。而RMI可将Java模式进行扩展,使之可在任何地方运行”。

因为RMI是以Java为核心的,所以,它将Java的安全性和可移植性等强大功能带给了分布式计算。您可将代理和梢?务逻辑等属性移动到网络中最合适的地方。如果您要扩展Java在系统中的使用,RMI将使您充分利用其强大功能。

RMI可利用标准Java本机方法接口JNI与现有的和原有的系统相连接。RMI还可利用标准JDBC包与现有的关系数据库连接。RMI/JNI和RMI/JDBC相结合,可帮助您利用RMI与目前使用非Java语言的现有服务器进行通信,而且在您需要时可扩展Java在这些服务器上的使用。RMI可帮助您在扩展使用时充分利用Java的强大功能。

一、RMI(远程方法调用)的组成

      一个正常工作的RMI系统由下面几个部分组成:

      ·远程服务的接口定义

      ·远程服务接口的具体实现

      ·桩(Stub)和框架(Skeleton)文件

      ·一个运行远程服务的服务器

      ·一个RMI命名服务,它允许客户端去发现这个远程服务

      ·类文件的提供者(一个HTTP或者FTP服务器)

      ·一个需要这个远程服务的客户端程序

二、RMI(远程方法调用)的工作原理

RMI系统结构,在客户端和服务器端都有几层结构。

---------          ----------

| 客户 |           | 服务器|

----------         ----------

    |                  |

-------------      ----------

| 占位程序 |       | 骨干网 |

--------------     -----------

      |                 |

------------------------------------ 

       | 远 程 引 用 层 |

------------------------------------ 

       |                |

------------------------------------

          | 传 输 层 |

------------------------------------

     方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传 输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。 占位程序扮演着远程服务器对象的代理的角色,使该对象可被客户激活。 远程引用层处理语义、管理单一或多重对象的通信,决定调用是应发往一个服务器还是多个。传输层管理实际的连接,并且追追踪可以接受方法调用的远程对象。服务器端的骨干网完成对服务器对象实际的方法调用,并获取返回值。返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上经传输层和远程调用层返回。最后,占位程序获得返回值。

      要完成以上步骤需要有以下几个步骤:

      1、生成一个远程接口

      2、实现远程对象(服务器端程序)

      3、生成占位程序和骨干网(服务器端程序)

      4、编写服务器程序

      5、编写客户程序

      6、注册远程对象

      7、启动远程对象

三、RMI(远程方法调用)的优点

从最基本的角度看,RMI是Java的远程过程调用(RPC)机制。与传统的RPC系统相比,RMI具有若干优点,因为它是Java面向对象方法的一部分。传统的RPC系统采用中性语言,所以是最普通的系统--它们不能提供所有可能的目标平台所具有的功能。

RMI以Java为核心,可与采用本机方法与现有系统相连接。这就是说,RMI可采用自然、直接和功能全面的方式为您提供分布式计算技术,而这种技术可帮助您以不断递增和无缝的方式为整个系统添加Java功能。

RMI的主要优点如下:

面向对象:RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,您可以将类似Java哈希表这样的复杂类型作为一个参数进行传递。而在目前的RPC系统中,您只能依靠客户机将此类对象分解成基本数据类型,然后传递这些数据类型,最后在服务器端重新创建哈希表。RMI则不需额外的客户程序代码(将对象分解成基本数据类型),直接跨网传递对象。

可移动属性:RMI可将属性(类实现程序)从客户机移动到服务器,或者从服务器移到客户机。

设计方式:对象传递功能使您可以在分布式计算中充分利用面向对象技术的强大功能,如二层和三层结构系统。如果您能够传递属性,那么您就可以在您的解决方案中使用面向对象的设计方式。所有面向对象的设计方式无不依靠不同的属性来发挥功能,如果不能传递完整的对象--包括实现和类型--就会失去设计方式上所提供的优点。

安 全:RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全。RMI使用专门为保护系统免遭恶意小应用程序侵害而设计的安全管理程序,可保护您的系统和网络免遭潜在的恶意下载程序的破坏。在情况严重时,服务器可拒绝下载任何执行程序。

便于编写和使用:RMI使得Java远程服务程序和访问这些服务程序的Java客户程序的编写工作变得轻松、简单。远程接口实际上就是Java接口。服务程序大约用三行指令宣布本身是服务程序,其它方面则与任何其它Java对象类似。这种简单方法便于快速编写完整的分布式对象系统的服务程序,并快速地制做软件的原型和早期版本,以便于进行测试和评估。因为RMI程序编写简单,所以维护也简单。

可连接现有/原有的系统:RMI可通过Java的本机方法接口JNI与现有系统进行进行交互。利用RMI和JNI,您就能用Java语言编写客户端程序,还能使用现有的服务器端程序。在使用RMI/JNI与现有服务器连接时,您可以有选择地用Java重新编写服务程序的任何部分,并使新的程序充分发挥Java的功能。类似地,RMI可利用JDBC、在不修改使用数据库的现有非Java源代码的前提下与现有关系数据库进行交互。

编写一次,到处运行:RMI是Java“编写一次,到处运行 ”方法的一部分。任何基于RMI的系统均可100%地移植到任何Java虚拟机上,RMI/JDBC系统也不例外。如果使用RMI/JNI与现有系统进行交互工作,则采用JNI编写的代码可与任何Java虚拟机进行编译、运行。

分布式垃圾收集:RMI采用其分布式垃圾收集功能收集不再被网络中任何客户程序所引用的远程服务对象。与Java 虚拟机内部的垃圾收集类似,分布式垃圾收集功能允许用户根据自己的需要定义服务器对象,并且明确这些对象在不再被客户机引用时会被删除。

并行计算:RMI采用多线程处理方法,可使您的服务器利用这些Java线程更好地并行处理客户端的请求。Java分布式计算解决方案:RMI从JDK 1.1开始就是Java平台的核心部分,因此,它存在于任何一台1.1 Java虚拟机中。所有RMI系统均采用相同的公开协议,所以,所有Java 系统均可直接相互对话,而不必事先对协议进行转换。

四、RMI与CORBA的关系

    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 语言推向了目前服务器端企业开发的主流语言的领先地位。

转载于:https://www.cnblogs.com/alaricblog/p/3278324.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

都说dlib是人脸识别的神器,那到底能不能识破妖怪的伪装?

作者:盛光晓原文链接:https://blog.csdn.net/esa72ya/article/details/89189987众所周知,dlib是人脸识别的利器,被广泛应用于行为检测、安防工程、表情分析等,甚至还有学术界的前沿老师将这一技术用于上课点名&#xf…

hdu1024Max Sum Plus Plus

之前在书里看过了,但是没有做过例题,忘记它的原理了 dp[i][j]表示前i个数中选j段所能构成的最大值,(强调一下,这j段包括最后一个元素[i]的),这样第i个元素要不跟倒数第二个一起,要不…

国内有哪些不错的CV(计算机视觉)团队

点击上方“算法猿的成长”,选择“加为星标”第一时间关注 AI 和 Python 知识来源:知乎问题对于初入 CV 领域的同学,如果可以加入一个不错的团队,有好的导师带着,同时还有可以请教的师兄师姐,会加快入门 CV …

数据全裸时代,你的隐私有多容易获取?

大家好我是痴海,一位转型做增长的爬虫师,由于工作的缘故,对于身边许多信息都非常敏感。上个月朋友圈有很多人都在晒四六级成绩,有人欢喜有人忧愁,而我却感受到深深的恐惧。2018 年腾讯手机管家在一个报告中公布了一个数…

单元测试的一些基本概念

我们(程序员)多多少少都写过单元测试,有的可能几年前写的几行代码(比如我), 姑且也算写过吧,但是有些东西还是不是很清楚,比如什么是单元测试?怎么才算是好的单元测试&am…

深度学习领域有哪些瓶颈

来源:知乎问题深度学习是近年来人工智能热潮的原因,它的出现在很多方面都作出了突破,包括在图像、NLP以及语音等领域都有很多问题取得很大的突破,但它目前也存在一些问题和瓶颈需要解决。量子位https://www.zhihu.com/question/40…

cnn调优总结

关注&置顶“算法猿的成长”每日8:30,干货速递!转载自 Charlotte数据挖掘资料来自网上,略有删改针对CNN优化的总结Systematic evaluation of CNN advances on the ImageNet使用没有 batchnorm 的 ELU 非线性或者有 batchnorm 的 ReLU。用类…

Android笔记之自定义Editext

1、重写EdiText类,下面是一个逐条显示下划线的Editext import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.Gravity; import android.w…

养成好习惯

马上就要毕业了,虽然只有一年了,但是感觉似乎就是明天了。 自己可能要离开这里到新的地方展开新的旅行了!记得自己刚来大学的时候,还是很稚嫩的,对未来充满了各种美好的期待,也对于自己的大学生活有着无限的…

程序员到底要不要接外包?

? “沉默王二” ,你值得星标的公众号之前写过一篇文章,题目叫做《窝在二线城市很难受,要杀回一线城市吗》,里面提到程序员接外包这件事,于是很多小伙伴就私下问我:二哥,我也想接外包&#xff0…

Github项目|几行代码即可实现人脸检测、目标检测的开源计算机视觉库

关注&置顶“算法猿的成长”每日8:30,干货速递!2019 年第 73 篇文章,总第 97 篇文章今天介绍一个简单、易用的开源计算机视觉库,名字是 cvlib,其 Github 地址:https://github.com/arunponnusamy/cvlib官…

认识迅雷界面引擎

UI开发的新时代----认识迅雷界面引擎 第一部分:交互开发技术概述软件产品的交互开发一直以来都不是一件令人愉悦的事情。首先,由于每个人编写的第一个图形应用程序就已经使用了一些交互开发技术,而且由于IDE工具的强大,容易总结出交互开发就是…

最棒的Chrome插件去哪找?这里有一份榜单

上个月给大家介绍了重大更新后的 扩展迷 Extfans 网站,当时也说到:可以把它当成是一个 Chrome 商店的镜像版,可以无障碍下载安装 Chrome 扩展。不得不说,在不能正常使用 Chrome 商店的情况下,多亏了扩展迷 Extfans 这样…