RMI远程方法调用技术

RMI是J2EE技术规范之一,英文全称Remote Method Invocation(即远程方法调用)。远程方法调用是一种同一计算机不同Java研发软件系统之间或不同计算机不同Java研发软件系统之间通过调用对方远程方法启动对方进程进而实现交互的一种机制,这种机制为开发分布式应用程序带来了极大的方便。

RMI技术的应用通常包括在两个独立的应用程序中:服务端应用程序和客户端应用程序。

服务端应用程序:

RMI典型的服务端代码将创建多个远程对象,使这些远程对象能够被引用,然后等待客户端调用这些远程对象中的方法,其实现步骤如下:

1、自定义远程接口
        示例代码如下:

package com.ghj.packageofrmi;

import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * 定义一个继承Remote接口的远程接口。
 *
 * @author 高焕杰
 */
public interface IHelloWord extends Remote {

	/**
     * 获取信息
     *
     * @author 高焕杰
     */
    String getMsg() throws RemoteException;
}

在 Java RMI服务端,远程对象是自定义远程接口实现类的实例, 该远程接口声明每个要远程调用的抽象方法。
        自定义远程接口特点:
        a、该接口必须继承java.rmi.Remote接口;
        b、该接口中的每个抽象方法必须抛出RemoteException异常或RemoteException 的父类异常;
        2、自定义远程接口实现类
        示例代码如下:

package com.ghj.packageofrmi;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

/**
 * 远程接口实现类。
 *
 * @author 高焕杰
 */
public class HelloWordImp extends UnicastRemoteObject implements IHelloWord{ 

	private static final long serialVersionUID = -918923487973606075L;

	/**
     * 远程接口实现类构造方法
     *
     * @author 高焕杰
     */
    public HelloWordImp() throws RemoteException {
    } 

    /**
     * 获取信息
     *
     * @author 高焕杰
     */
    @Override
    public String getMsg() throws RemoteException {
        return "Hello World!";
    }
}

自定义远程接口实现类特点:
        a、该实现类必须实现自定义远程接口内的每个远程抽象方法;
        b、该实现类必须继承java.rmi.UnicastRemoteObject类。UnicastRemoteObject类可以让服务端远程对象与客户端建立一对一的连接;
        c、由于UnicastRemoteObject类中默认构造方法抛出RemoteException异常,因此该实现类中默认的构造方法必须显示地写出来并且该构造方法必须声明抛出RemoteException异常,别忘了子类构造方法要与父类参数列表相同的构造方法一致,父类无参构造方法抛出了RemoteException异常,那么子类无参构造方法也需要抛出抛出RemoteException异常;
        d、该实现类也可以含有其它非远程接口定义的抽象方法或非接口方法(即实现类内部自定义的方法,这些方法不能使用@Override进行注释),但客户端不能调用这些新增的方法(别忘了,这些方法并不是自定义远程接口的抽象方法)。
        3、服务端RMI类
        示例代码如下:

package com.ghj.packageoftest;

import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

import com.ghj.packageofrmi.HelloWordImp;
import com.ghj.packageofrmi.IHelloWord;

/**
 * 启动RMI服务
 *
 * @author 高焕杰
 */
public class StartRMIServer {

    public static void main(String args[]) {

        try {
        	int registryPort = 8888;//注册表上接受请求的端口号
            //通过IHelloWord接口实现类声明并创建该接口对象以作为远程对象 。
        	IHelloWord helloWord = new HelloWordImp();
            //为RMI服务注册表设置端口号,这一步不可缺,否则无法将远程对象绑定远程注册表上 。
            LocateRegistry.createRegistry(registryPort);
            //将serviceName(即服务名称)和远程接口变量绑定,绑定的URL标准格式为“rmi://host:registryPort/serviceName”,也可以“//host:registryPort/serviceName”
            Naming.bind("rmi://localhost:" + registryPort + "/rmiDemo",helloWord);
//            Naming.bind("//localhost:" + registryPort + "/rmiDemo",helloWord);
            System.out.println("RMI服务成功启动!");
        } catch (RemoteException e) {
            System.err.println("远程对象创建失败!");
            e.printStackTrace();
        } catch (AlreadyBoundException e) {
            System.err.println("发生重复绑定远程对象异常!");
            e.printStackTrace();
        } catch (MalformedURLException e) {
            System.err.println("绑定的URL不正确!");
            e.printStackTrace();
        }
    }
}

客户端应用程序:

时间: 2024-08-30 12:22:43

RMI远程方法调用技术的相关文章

Java RMI(远程方法调用) 实例与分析 (转)

目的: 通过本文,可以加深对Java RMI的理解,知道它的工作原理,怎么使用等. 也为了加深我自己的理解,故整理成文.不足之处,还望指出. 概念解释: RMI(RemoteMethodInvocation):远程方法调用,顾名思义,通过远程的方式调用非本地对象的方法并返回结果.使用远程调用通常解决本地计算瓶颈问题,例如分布式记算,最近很火的阿尔法狗人机大战,据说运算使用上千个CPU. JRMP(java remote method protocol):java远程方法协议,这是完成java到j

Java的RMI远程方法调用实现和应用

最近在学习Dubbo,RMI是很重要的底层机制,RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一台计算机(即JVM虚拟机)上的对象可以调用另外一台计算机上的对象来获取远程数据. RMI的实现对建立分布式Java应用程序至关重要,是Java体系非常重要的底层技术. 1.RMI的概念和原理 RMI思路是在客户端安装一个代理(proxy),代理是位于客户端虚拟机中的一个对象,对于客户端对象,看起来就

JAVA RMI远程方法调用简单实例[转]

RMI的概念 RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一台计算机上的对象可以调用另外 一台计算机上的对象来获取远程数据.RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径.在过去,TCP/IP套接字通讯是远程通讯的主要手段,但此开发方式没有使用面向对 象的方式实现开发,在开发一个如此的通讯机制时往往令程序员感觉到乏味,对此RPC(Remote

Java之RMI(远程方法调用)

RMI(Remote Method Invocation)中文名称是远程方法调用,可用于分布式计算. 这里就不去详细介绍RMI了,本Blog主要讲叙RMI实战和有哪些需要注意的地方,如果想要查看详细介绍请查看:百度百科RMI RMI分为服务端和客户端 服务端: 创建服务端: LocateRegistry.createRegistry(端口); Naming.rebind("rmi://IP地址:端口/RMI服务名称",RMI服务对象);//rebind也可以用bind替代 示例: Lo

如何在Spring框架中使用RMI技术

在博客<RMI远程方法调用技术>中使用纯Java代码演示了RMI技术的使用,本篇博客将介绍如何在Spring中使用RMI技术. 正如博客<RMI远程方法调用技术>提到的那样--RMI技术的应用通常包括在两个独立的应用程序中:RMI服务端应用程序和RMI客户端应用程序.本博客也从这两方面入手:        RMI服务端应用程序: 1.自定义远程接口 代码如下: package com.ghj.packageofrmi; /** * 定义远程接口. * * @author 高焕杰 *

远程调用之RMI技术

---恢复内容开始--- RMI已经不是什么新的技术了,但是相对于webservice来说,rmi比较简单,比较适合一些小的应用,下面的helloword列子可以介绍rmi的相关技术 服务器端代码: 服务器接口实现Remote 1 package com.qcf.server; 2 3 import java.rmi.Remote; 4 import java.rmi.RemoteException; 5 /** 6 * 服务类 7 * 定义行为集 8 * @author Administrat

对JAVA RMI的认识

RMI的定义 RPC (Remote Procedure Call):远程方法调用,用于一个进程调用另一个进程中的过程,从而提供了过程的分布能力. RMI(Remote Method Invocation):远程方法调用,即在RPC的基础上有向前迈进了一步,提供分布式对象间的通讯.允许运行在一个java 虚拟机的对象调用运行在另一个java虚拟机上对象的方法.这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中. RMI的全称宗旨就是尽量简化远程接口对象的调用.

Java接口技术

1.RMI技术 1.1 RMI技术介绍 RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一.其实它可以被看作是RPC的Java版本.但是传统RPC并不能很好地应用于分布式对象系统.而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用. RMI目前使用Java远程消息交换协议JRMP

RMI RPC socket

  1.RPC RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC不依赖于具体的网络传输协议,tcp.udp等都可以.由于存在各式各样的变换和细节差异,相应的rpc也派生出了各式远程过程通信协议.RPC是跨语言的通信标准,SUN和微软都有其实现,比如RMI可以被看作SUN对RPC的Java版本( 实现),而微软的DCOM就是建立在ORPC协议之上.一言以蔽之,RPC是协议,而无