`
goto0917
  • 浏览: 47975 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论
  • take: 这是POI方式,不是JXLS方式. JXLS包路径都是net ...
    jxls
阅读更多
RMI是Remote Method Invocation(远程方法调用)的 所写。它允许一个Java程序调用网络中另一台计算机上的Java方法,就如调用本机的方法一样。实现RMI调用的程序和被调用的方法,都必须是Java代码,即客户端和服务器端都必须通过纯Java实现。

RMI是基于Java的分布式编程模型,使用RMI进行远程方法调用时,无须考虑方法底层的网络传输细节。下面使用RMI的示例程序:

先编写RMI服务器端,RMI需要通过远程接口“暴露”服务。也就是说,所有想被客户机调用的方法都必须在Remote接口里声明,否则无法完成调用。远程接口如下:

远程接口必须集成java.rmi.Remote接口

public interface Server extends Remote

{

         //所有在Remote接口里声明的方法都必须抛出RemoteException异常

    String helloWorld(String name) throws RemoteException;

    Person getPerson(String name,int age)throws RemoteException;

}

远程接口必须继承java.rmi.Remote接口。远程接口里声明的方法会通过网络传输,而网络是不可靠的,因此,所有的远程方法都必须抛出RemoteException。RMI服务是典型的面向接口编程,只有在远程接口里定义的方法才会作为远程服务。

下面是远程服务提供类,远程服务提供类必须实现远程接口,并继承java.rmi.server.UnicastRemoteObject对象,继承该类能“暴露”远程服务。

//远程服务类,远程服务类必须继承UnicastRemoteObject,并实现Remote接口

public class ServerImpl extends UnicastRemoteObject implements Server

{

         //远程服务类必须拥有构造器,且构造器必须抛出RemoteException异常

    public ServerImpl()throws RemoteException

    {

}

//实现Remote接口必须实现的方法

    public String helloWorld(String name)throws RemoteException

    {

           return name + ", 您好!";

    }

//实现Remote接口必须实现的方法

    public Person getPerson(String name,int age)throws RemoteException

    {

           return new Person(name,age);

    }

         //下面是服务类的本地方法,不会“暴露”为远程服务。

         public void info()

{

         System.out.println(“我是本地方法”);

}

//下面提供程序入口,将远程类实例绑定为本机的服务。

    public static void main(String[] args)throws Exception

{

           //创建远程服务类实例

           Server imp = new ServerImpl();

                   //注册远程服务的端口

                   LocateRegistry.createRegistry(1099);

                   //将远程服务实例绑定为远程服务。

                   Naming.rebind("rmi://:1099/fdf", imp);

    }

}

远程服务类必须有构造器,即使找个构造器什么都不做。而且,构造器必须抛出RemoteException异常。将两个编辑好的源文件存盘,然后编译。对于使用RMI,仅仅编译还不够,还必须使用rmic命令编译服务类,编译服务类是为了生成stub和skeleton——查看存放class文件的地方,多了如下两个class文件:

q      ServerImpl_Stub.class

q      ServerImpl_Skel.class

这两个类就是服务类生成的stub和skeleton。客户端程序面向接口编程,客户端部分需要Server接口的class文件,还需要stub文件。客户端的源代码如下:

public class RMIClient

{

         //主方法,程序入口

    public static void main(String[] args)throws Exception

    {

                   //通过JNDI查找远程服务

           Server ser = (Server)Naming.lookup("rmi://:1099/fdf");

                   //调用远程方法

           System.out.println(ser.helloWorld("yeeku"));

                   //调用远程方法。

           System.out.println(ser.getPerson("yeeku",28));

    }

}

从客户端程序看,无法感受到Server的实现在远端。程序调用Server实例方法时,与平常调用方法只有非常细微的区别:调用远程方法必须抛出RemoteException。

再看远程方法的返回值,helloWorld的返回值是String,而getPerson的返回值则是Person对象。远程方法的返回值必须有一个要求:实现Serializable接口。因为远程的方法的参数、返回值都必须在网络上传输,网络只能传输字节流,因此,要求参数、返回值都可以转换成字节流——即实现序列化。主程序的如下一行代码,用于注册远程服务端口:

LocateRegistry.createRegistry(1099);

1099是RMI服务的默认端口。然后执行如下代码绑定远程服务

Naming.rebind("rmi://:1099/fdf", imp);

客户端使用JNDI查找,查找远程服务名。将远程服务对象类型转换成远程接口类型,客户端面向接口编程。RMI的具体实现,依然是依赖于底层的Socket编程。RMI依赖于TCP/IP传输协议,服务器端skeleton建立ServerSocket监听请求,而客户端建立Socket请求连接。RMI实现了网络传输的多线程、IO等底层细节。这些细节的实现就隐藏在rmic命令的执行中:使用rmic命令编译时生成的两个class文件:

q      stub:该文件用于与客户端交流,建立Socket请求连接。

q      skeleton:该文件用于与服务器端交流,建立ServerSocket监听请求。

RMI的原理示意如图所示。



  • 大小: 27.1 KB
分享到:
评论

相关推荐

    【Java RMI介绍以及编写Demo】

    下面将详细介绍Java RMI的基本概念、工作原理以及如何编写一个简单的RMI示例。 ### RMI基本概念 1. **远程对象(Remote Object)**:在RMI中,远程对象是实现了特定接口的Java对象,这个接口被称为远程接口...

    RMI-IIOP.zip_The Client_rmi iiop

    **RMI介绍** RMI是Java中用于在不同JVM之间调用方法的机制。它允许对象在不同的网络节点上分布,提供了一种透明的方式来调用远程对象的方法,仿佛它们就在本地一样。RMI的核心概念包括:远程接口、远程对象、注册表...

    java rmi详细介绍介绍

    ### Java RMI 详细介绍 #### 一、Java RMI 概念 Java远程方法调用(Java Remote Method Invocation,简称 Java RMI)是一种允许在一台机器上的Java对象通过网络调用另一台机器上的对象的方法的技术。它为Java开发...

    rmi接口技术详细介绍文档

    **RMI接口技术详解** RMI(Remote Method Invocation),即远程方法调用,是Java平台中用于实现不同Java虚拟机间对象通信的技术。RMI的目标是使得分布在网络上的对象能够像本地对象一样工作,实现位置透明性,隐藏...

    分布式实验报告RMI.docx

    本实验报告主要介绍了 Java RMI(Remote Method Invocation,远程方法调用)的基本概念和实现步骤。RMI 是一种分布式对象通讯机制,允许运行在一个 Java 虚拟机的对象调用运行在另一个 Java 虚拟机上对象的方法。 ...

    java_rmi文档

    本文档详细介绍了RMI的使用方法和工作机制,并配以丰富的实例进行讲解。 1. **RMI基本概念** - **远程对象**:在远程服务器上的对象,可以通过网络调用其方法。 - **接口**:定义远程对象需要实现的公共方法,...

    rmi_java项目实例

    本项目实例是基于RMI技术实现的一个服务器端程序,名为"RMIServer",提供了远程服务的接口和实现,下面将详细介绍RMI的基本概念、工作原理以及如何通过这个项目实例来学习和应用RMI。 1. **RMI基本概念**: - **...

    Weblogic Server与RMI

    Weblogic Server与RMI RMI的使用介绍

    RMI-IIOP 基于SUN

    这篇文章将详细介绍RMI-IIOP的基本概念、工作原理及其在实际应用中的价值。 RMI是Java中的一种机制,允许一个Java对象调用另一个在网络中不同 JVM(Java虚拟机)上运行的对象的方法。RMI-IIOP则是在RMI的基础上添加...

    Synaptics_RMI3_Specification.zip_RMI3_Synaptics_rmi4_s3508 _spec

    在“Synaptics_RMI3_Specification.pdf”文档中,详细介绍了S3508的硬件架构,包括传感器阵列、信号处理单元和接口模块。其中,传感器阵列部分详细描述了触控感应器的工作原理和配置;信号处理单元则涵盖了数据采集...

    Synaptics RMI4 Specification

    《Synaptics RMI4 Specification》是一份详细介绍Synaptics RMI4技术标准的文档,该文档提供了关于如何使用Synaptics RMI4硬件接口的所有必要信息。Synaptics RMI4(Relay Module Interface)是一种用于触控板和触摸...

    java_in_rmi.rar_Java RMI_RMI java_rmi _精通rmi

    1. RMI基础知识:解释RMI的概念,介绍其工作原理,包括客户端和服务端的角色。 2. 创建远程接口:讲解如何定义远程接口,它是远程方法调用的合同。 3. 实现远程对象:介绍如何实现远程接口,并创建远程对象实例,...

    java rmi详细介绍.doc

    java rmi详细介绍

    synaptics s3202 寄存器手册以及RMI4手册

    这两个手册详细介绍了Synaptics公司的S3202芯片以及RMI4(Remote Mouse Interface 4)协议的运作机制。 S3202是一款由Synaptics公司生产的高性能触控芯片,广泛应用于各种触摸屏设备,如智能手机、平板电脑等。...

    JAVA RMI.rar_Java RMI_ME_RMI java_rmi

    在"JAVA RMI.rar"中,"www.pudn.com.txt"可能包含了关于RMI的额外信息,比如项目的介绍、代码示例或者使用说明。而"JAVA RMI"文件可能是一个包含RMI实现的Java类库,或者是演示RMI功能的可执行程序。通过阅读"read ...

    RMI.rar_rmi

    1. "Readme.txt"通常包含关于压缩包的使用指南或者简要介绍,可能概述了RMI的基本原理、配置步骤,或者异步消息处理和回调机制的实践示例。 2. "www.pudn.com.txt"可能是从网站pudn.com下载的资源,可能包含了与RMI...

    Eclipse RMI插件使用API

    本文将详细介绍如何在Eclipse环境中设置并使用RMI插件来开发RMI应用程序。 #### 二、安装与配置RMI插件 1. **下载插件**:访问[官方文档](http://www.genady.net/rmi/v16/index.html?/rmi/v16/main.html&MAIN16)...

Global site tag (gtag.js) - Google Analytics