`
gaojingsong
  • 浏览: 1182955 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【Java RMI介绍以及编写Demo】

阅读更多

一、RMI介绍

Java RMI 指的是远程方法调用 (Remote Method Invocation)它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。Java RMI不是什么新技术(在Java1.1的时代都有了),但却是是非常重要的底层技术。

大名鼎鼎的EJB都是建立在rmi基础之上的,现在还有一些开源的远程调用组件,其底层技术也是rmi。

总结:RMI全称远程方法调用,RMI技术可以(跨虚拟机JVM调用)



 

二、RMI远程调用步骤:

1,客户对象调用客户端辅助对象上的方法

2,客户端辅助对象打包调用信息(变量,方法名),通过网络发送给服务端辅助对象

3,服务端辅助对象将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象

4,调用真正服务对象上的真正方法,并将结果返回给服务端辅助对象

5,服务端辅助对象将结果打包,发送给客户端辅助对象

6,客户端辅助对象将返回值解包,返回给客户对象

7,客户对象获得返回值



 

 

三、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的系统均可100%地移植到任何Java虚拟机上,RMI/JDBC系统也不例外。如果使用RMI/JNI与现有系统进行交互工作,则采用JNI编写的代码可与任何Java虚拟机进行编译、运行。 

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

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

 

四、开发步骤 源码下载【RMI例子.rar (2.6 KB)

1)服务端

步骤一创建远程方法接口,该接口必须继承自Remote接口



 
由于远程方法调用的本质依然是网络通信,只不过隐藏了底层实现,网络通信是经常会出现异常的,所以接口的所有方法都必须抛出RemoteException以说明该方法是有风险的

备注:Remote 接口是一个标识接口,用于标识所包含的方法可以从非本地虚拟机上调用的接口,Remote接口本身不包含任何方法。常见标志接口:Serializable

步骤二服务端main方法extends UnicastRemoteObject implements IHello 



 步骤三:生成服务端存根文件供客户端调用



 

存根文件如下:



 

2)客户端

步骤一:客户端公共接口必须和服务端对应



 

 

步骤二:开发客户端代码

package cn.com.rmidemo.client;

import java.rmi.Naming;

 

import cn.com.rmidemo.IHello;

public class Hello_RMI_Client {

    public static void main(String[] args) {

        try {

            IHello hello = (IHello) Naming.lookup("rmi://192.168.1.104:1099/hello");

           System.out.println(hello.sayHello("我的名字是gaojingsong"));

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

 

三、测试

1)服务端打包部署



 

备注:如果服务端不加

           //加上此程序,就可以不要在控制台上开启RMI的注册程序,1099是RMI服务监视的默认端口

            LocateRegistry.createRegistry(1099); 

则需要在服务端控制台手工启动一个RMI的注册监听端口

          JDK/bin/rmiregistry 1099&  

2)客户端测试



 

 

 

  • 大小: 8.4 KB
  • 大小: 62 KB
  • 大小: 62.1 KB
  • 大小: 80.2 KB
  • 大小: 29 KB
  • 大小: 24.1 KB
  • 大小: 130.1 KB
  • 大小: 53.9 KB
  • 大小: 56.7 KB
0
0
分享到:
评论

相关推荐

    Java RMI(远程方法调用)Demo

    Java RMI,全称为Remote Method Invocation,是Java平台上的一个...对于初学者,通过实践Java RMI Demo可以深入理解远程方法调用的概念和流程。在实际项目中,根据需求可能会选择更为复杂但功能强大的分布式系统框架。

    RMI 跨平台调用的demo

    由于Java的“一次编写,到处运行”特性,RMI可以在任何支持Java的平台上运行,如本示例中的Windows客户端和Linux服务器。这得益于Java的字节码和网络通信协议,使得不同操作系统上的JVM能够理解和处理相同的接口调用...

    (转)用c++实现java的rmi服务

    通过解压并分析源代码,我们可以深入理解C++实现RMI的具体细节,包括类的设计、网络通信代码以及序列化技术的运用。 这个项目对学习和理解C++中的分布式计算和网络编程非常有帮助。开发者可以通过研究源码,学习...

    RMI-demo.zip_DEMO_rmi

    "RMI-demo.zip_DEMO_rmi"是一个示例项目,用于教学目的,展示了RMI的基本用法。 该压缩包包含以下四个主要文件: 1. **FirstProblem.jar**:这是一个包含服务器端和客户端所需类的Java可执行jar文件。RMI应用通常...

    基于Spring+hibernate+mysql+rmi+swing的登录Demo

    总结起来,这个登录Demo巧妙地融合了Spring的控制反转与面向切面编程,Hibernate的对象关系映射,MySQL的可靠数据存储,RMI的远程通信,以及Swing的图形界面设计,形成了一套完整的客户端-服务器端应用。这样的组合...

    Java demo 算法笔记

    Java提供了RMI(远程方法调用)、JMS(Java消息服务)以及近年来流行的微服务框架如Dubbo、Spring Cloud等,用于构建分布式应用。理解这些技术的基本原理和使用方式,有助于开发者构建可扩展、高可用的系统。 代码...

    java中的rmi技术

    在"rmiDEMO"这个博文中,作者可能详细介绍了如何创建一个简单的RMI示例,包括设置环境、编写远程接口和实现、注册和调用远程对象等步骤。由于没有具体的博文内容,这里无法给出更详细的解释,但可以肯定的是,博主...

    RMI demo

    【RMI(远程方法调用)基础介绍】 RMI(Remote Method Invocation,远程方法调用)是Java平台中用于分布式计算的一种技术。它允许Java对象在不同的Java虚拟机(JVM)之间进行通信,仿佛它们是在同一台机器上运行...

    RMI的简单完整例子

    - **实现远程接口**:编写一个类实现该接口,并使用`java.rmi.Remote`作为父接口。 - **导出远程对象**:使用`java.rmi.registry.Registry`的`bind()`方法将远程对象绑定到注册表。 - **创建stub**:使用`rmic`...

    javaRMIDemo实例

    通过这个示例,学习者可以了解到如何设置RMI环境,如何编写远程接口和对象,以及如何在客户端和服务器之间进行交互。此外,它还可能涵盖了异常处理(如`RemoteException`)和安全性方面的基础内容,因为RMI调用跨越...

    java实现的会议管理系统demo

    Java作为一种跨平台的编程语言,以其“一次编写,到处运行”的特性,成为构建企业级应用的理想选择。在会议管理系统中,Java提供了丰富的类库和API,支持高效的网络通信和数据处理,确保了系统的稳定性和可靠性。 ...

    hessian demo 包括服务端和客户端

    Hessian是一种高效的RPC(Remote Procedure Call)协议,它允许Java应用程序之间进行远程方法调用,类似于RMI(Remote Method Invocation)。Hessian由Caucho公司开发,它的主要优点在于序列化效率高,能够将Java...

    dubbo 简单测试DEMO

    例如,我们可以创建一个名为`HelloService`的接口,然后编写其实现类`HelloServiceImpl`。在Spring配置文件中,通过`<dubbo:service>`标签来暴露这个服务,指定接口、实现类和版本等信息。 2. **服务消费者...

    定时检测,重启外部服务demo

    Java作为跨平台的编程语言,被用于编写控制服务重启的逻辑。这里可能包含一个Java应用程序,通过`Runtime.getRuntime().exec()`方法执行批处理脚本,或者使用Java的`ProcessBuilder`类来调用系统命令。此外,Java...

    Java网络高级编程

    RMI是Java中实现远程方法调用的技术,允许一个Java对象调用位于不同JVM上的对象的方法。RMI包括两部分:接口定义远程方法,实现远程对象。通过 stub 和 skeleton,RMI可以透明地处理网络通信和序列化,使得分布式...

    Dubbo_Demo_HelloWorld

    【Dubbo_Demo_HelloWorld】是一个典型的Dubbo学习示例,它涵盖了服务提供者(Service Provider)、服务消费者(Service Consumer)以及Dubbo的核心API使用。这个Demo旨在帮助初学者理解Dubbo的基本工作原理和核心...

    dubboDemo新手教学

    【标题】:Dubbo新手...通过这个简单的"DubboDemo"教学,你可以了解到如何搭建一个基本的Dubbo服务架构,理解服务提供与消费的过程,以及服务治理的基本概念。随着对Dubbo深入学习,你将能够构建更复杂的分布式系统。

    dubbo_demo

    通过 "dubbo-demo",开发者可以学习到如何配置和启动服务提供者,如何编写服务消费者来调用服务,以及如何利用注册中心进行服务发现。这对于理解和掌握 Dubbo 的核心功能是非常有帮助的。同时,这个 demo 也可以作为...

    idea本地调试leetcode-mysc:java系列

    介绍远程方法调用,本地使用java实现一个rmi远程方法调用的demo 介绍zookeeper的命名服务,配置管理,集群管理,分布式锁,队列管理 介绍redis的原理,本地搭建一个redis服务,实现java的存入和取出 servlet 新特性 ...

Global site tag (gtag.js) - Google Analytics