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是Java的远程过程调用(RPC)机制与传统的RPC系统相比RMI具有若干优点因为它是Java面向对象方法的一部分传统的RPC系统采用中性语言所以是最普通的系统它们不能提供所有可能的目标平台所具有的功能
RMI以Java为核心可与采用本机方法与现有系统相连接这就是说RMI可采用自然直接和功能全面的方式为您提供分布式计算技术而这种技术可帮助您以不断递增和无缝的方式为整个系统添加Java功能
RMI的主要优点如下
面向对象RMI可将完整的对象作为参数和返回值进行传递而不仅仅是预定义的数据类型也就是说您可以将类似Java哈希表这样的复杂类型作为一个参数进行传递而在目前的RPC系统中您只能依靠客户机将此类对象分解成基本数据类型然后传递这些数据类型最后在服务器端重新创建哈希表RMI则不需额外的客户程序代码(将对象分解成基本数据类型)直接跨网传递对象
可移动属性RMI可将属性(类实现程序)从客户机移动到服务器或者从服务器移到客户机例如您可以定义一个检查雇员开支报告的接口以便察看雇员是否遵守了公司目前实行的政策在开支报告创建后客户机就会从服务器端获得实现该接口的对象如果政策发生变化服务器端就会开始返回使用了新政策的该接口的另一个实现程序您不必在用户系统上安装任何新的软件就能在客户端检查限制条件从而向用户提供烁?快的反馈并降低服务器的工作量这样就能具备最大的灵活性因为政策改变时只需要您编写一个新的Java类并将其在服务器主机上安装一次即可
设计方式对象传递功能使您可以在分布式计算中充分利用面向对象技术的强大功能如二层和三层结构系统如果您能够传递属性那么您就可以在您的解决方案中使用面向对象的设计方式所有面向对象的设计方式无不依靠不同的属性来发挥功能如果不能传递完整的对象包括实现和类型就会失去设计方式上所提供的优点
安全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的系统均可%地移植到任何Java虚拟机上RMI/JDBC系统也不例外如果使用RMI/JNI与现有系统进行交互工作则采用JNI编写的代码可与任何Java虚拟机进行编译运行
分布式垃圾收集RMI采用其分布式垃圾收集功能收集不再被网络中任何客户程序所引用的远程服务对象与Java 虚拟机内部的垃圾收集类似分布式垃圾收集功能允许用户根据自己的需要定义服务器对象并且明确这些对象在不再被客户机引用时会被删除
并行计算RMI采用多线程处理方法可使您的服务器利用这些Java线程更好地并行处理客户端的请求Java分布式计算解决方案RMI从JDK 开始就是Java平台的核心部分因此它存在于任何一台 Java虚拟机中所有RMI系统均采用相同的公开协议所以所有Java 系统均可直接相互对话而不必事先对协议进行转换