`
Suzh.Q
  • 浏览: 19725 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

RMI远程方法调用

    博客分类:
  • java
阅读更多

RMI的概念

        RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外 一台计算机上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。在过去,TCP/IP套接字通讯是远程通讯的主要手段,但此开发方式没有使用面向对 象的方式实现开发,在开发一个如此的通讯机制时往往令程序员感觉到乏味,对此RPC(Remote Procedure Call)应运而生,它使程序员更容易地调用远程程序,但在面对复杂的信息传讯时,RPC依然未能很好的支持,而且RPC未能做到面向对象调用的开发模 式。针对RPC服务遗留的问题,RMI出现在世人面前,它被设计成一种面向对象的通讯方式,允许程序员使用远程对象来实现通信,并且支持多线程的服务,这 是一次远程通讯的革命,为远程通信开辟新的里程碑。

 

RMI的开发步骤

  1. 先创建远程接口及声明远程方法,注意这是实现双方通讯的接口,需要继承Remote
  2. 开发一个类来实现远程接口及远程方法,值得注意的是实现类需要继承UnicastRemoteObject
  3. 通过javac命令编译文件,通过java -server 命令注册服务,启动远程对象
  4. 最后客户端查找远程对象,并调用远程方法

简单实例

       首先为服务建立一个Model层,注意因为此对象需要现实进行远程传输,所以必须继承Serializable

代码 

package rmi.model;

import java.io.Serializable;

//注意对象必须继承Serializable
publicclass PersonEntity implements Serializable {
    privateint id;
    private String name;
    privateint age;

    publicvoid setId(int id) {
        this.id = id;
    }

    publicint getId() {
        return id;
    }

    publicvoid setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    publicvoid setAge(int age) {
        this.age = age;
    }

    publicint getAge() {
        return age;
    }
}

 创建远程接口PersonService,注意远程接口需要继承Remote

代码

package rmi.service;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;
import rmi.model.*;

//此为远程对象调用的接口,必须继承Remote类
publicinterface PersonService extends Remote {
    public List<PersonEntity> GetList() throws RemoteException;
}

 建立PersonServiceImpl实现远程接口,注意此为远程对象实现类,需要继承UnicastRemoteObject

代码

package rmi.serviceImpl;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.LinkedList;
import java.util.List;

import rmi.model.PersonEntity;
import rmi.service.*;

//此为远程对象的实现类,须继承UnicastRemoteObject
publicclass PersonServiceImpl extends UnicastRemoteObject implements PersonService {

    public PersonServiceImpl() throws RemoteException {
        super();
        // TODO Auto-generated constructor stub
    }

    @Override
    public List<PersonEntity> GetList() throws RemoteException {
        // TODO Auto-generated method stub
        System.out.println("Get Person Start!");
        List<PersonEntity> personList=new LinkedList<PersonEntity>();
        
        PersonEntity person1=new PersonEntity();
        person1.setAge(25);
        person1.setId(0);
        person1.setName("Leslie");
        personList.add(person1);
        
        PersonEntity person2=new PersonEntity();
        person2.setAge(25);
        person2.setId(1);
        person2.setName("Rose");
        personList.add(person2);
        
        return personList;
    }    
}

 建立服务器端,在服务器端注册RMI通讯端口与通讯路径,然后通讯javac命令编译文件,通过java -server 命令注册服务。以下面代码为例,如果阁下将项目建立于D:\\RMI\RemotingService文件夹上时,则先输入D:\\RMI \RemotingService\src>javac rmi/remotingservice/Program.java获取Program.class(如何阁下使用的MyEclipse等开发工具,可跳 过此步,直接在*/bin文件夹中直接调用已经生成的Program.class),然后输入D:\\RMI\RemotingService \src>java rmi/remotingservice/Program启动服务。

代码

package rmi.remotingservice;

import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
 
import rmi.service.*;
import rmi.serviceImpl.*;

publicclass Program{

    publicstaticvoid main(String[] args) {
        try {
            PersonService personService=new PersonServiceImpl();
            //注册通讯端口
            LocateRegistry.createRegistry(6600);
            //注册通讯路径
            Naming.rebind("rmi://127.0.0.1:6600/PersonService", personService);
            System.out.println("Service Start!");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 最后建立客户端进行测试,注意客户调用的RMI路径必须服务器配置一致

代码 

package rmi.remotingclient;

import java.rmi.Naming;
import java.util.List;

import rmi.model.PersonEntity;
import rmi.service.*;

publicclass Program {
    publicstaticvoid main(String[] args){
        try{
            //调用远程对象,注意RMI路径与接口必须与服务器配置一致
            PersonService personService=(PersonService)Naming.lookup("rmi://127.0.0.1:6600/PersonService");
            List<PersonEntity> personList=personService.GetList();
            for(PersonEntity person:personList){
                System.out.println("ID:"+person.getId()+" Age:"+person.getAge()+" Name:"+person.getName());
            }
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

 转帖:http://www.cnblogs.com/leslies2/archive/2011/05/20/2051844.html

分享到:
评论

相关推荐

    RMI远程方法调用RMI远程方法调用

    RMI远程方法调用是Java平台上的一个关键特性,它允许Java对象在不同的JVM之间进行通信,从而实现分布式计算。RMI的核心理念是让开发者能够像调用本地方法一样调用远程对象的方法,简化了分布式系统的设计和实现。 *...

    Java RMI 远程方法调用

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间进行方法调用,仿佛这些方法是在本地对象上执行一样。这个技术极大地简化了构建分布式应用的...

    java rmi远程方法调用 客户端

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间透明地调用对象的方法。在RMI架构中,客户端能够像调用本地对象一样调用远程服务器上的对象...

    Java RMI远程方法调用详解-例子代码

    首先,我们需要定义一个实现了`java.rmi.Remote`接口的类,比如`MyRemoteInterface.java`,并在这个接口中声明所有需要远程调用的方法。这些方法必须抛出`java.rmi.RemoteException`,因为网络通信可能会出现异常。...

    RMI 远程方法调用.zip

    - **远程接口(Remote Interface)**:定义了可以被远程调用的方法,使用`@Remote`注解标识。 - **远程实现(Remote Implementation)**:实现了远程接口的类,包含远程方法的具体实现。 - **导出(Export)**:...

    rmi 远程方法调用

    RMI(Remote Method Invocation,远程方法调用)是Java中的一种技术,允许一个Java对象调用另一个在不同JVM(Java虚拟机)上的对象的方法。RMI是Java分布式计算的基础,它使得Java程序可以在网络环境中进行通信和...

    java rmi 远程方法调用 服务端

    1. 远程接口(Remote Interface):定义了可以被远程调用的方法,这些方法必须声明抛出`java.rmi.RemoteException`。接口需要使用`@Remote`注解标记。 2. 远程实现类(Remote Implementation):实现了远程接口,并...

    Java RMI远程方法调用

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许Java对象在不同的网络环境中进行交互,就像调用本地方法一样。RMI系统的核心概念是客户端可以调用服务器端的对象上...

    ssd8 exercise4 RMI远程方法调用

    RMI允许Java程序在不同的Java虚拟机(JVMs)之间透明地调用方法,就像这些方法是在同一个对象上本地执行一样。在"ssd8 exercise4"中,我们将深入探讨RMI的概念及其应用。 RMI的核心概念是“远程对象”,它是一个...

    RMI远程方法调用讲解教程

    RMI提供了透明的远程调用,使得开发者可以专注于业务逻辑,而不必关心底层的网络通信细节。 在RMI系统中,主要有以下几个关键组件: 1. **远程接口(Remote Interface)**:这是定义远程方法的接口,它需要继承`...

    JAVARMI远程方法调用简单实例.docx

    远程接口中的方法声明会抛出`RemoteException`,表明这些方法是可以被远程调用的。 2. **远程对象(Remote Object)**:实现了远程接口的类,通常需要继承`java.rmi.UnicastRemoteObject`。这个类负责具体实现远程...

    rmi 远程方法调用很简单例子

    在Java世界中,远程方法调用(Remote Method Invocation,RMI)是一种强大的技术,它允许一个Java对象在不同的JVM(Java Virtual Machine)之间进行通信,仿佛这些对象都在同一个JVM上。本示例将介绍如何实现一个...

    Java RMI(远程方法调用)Demo

    1. **创建远程接口**:定义一个继承自Remote的接口,声明需要远程调用的方法。 2. **实现远程接口**:编写一个类实现这个接口,提供具体的方法实现。 3. **注册远程对象**:在服务器端创建远程对象实例,然后将其...

    RMI客户端调用远程服务器方法-远程方法调用

    `RMI远程方法调用讲解教程.doc`可能详细解释了RMI的工作原理,包括序列化、异常处理、安全性等方面。序列化是RMI的关键,因为所有的参数和返回值都必须能够被序列化以便在网络上传输。此外,RMI还支持安全性机制,如...

    Java rmi远程方法调用基本用法解析

    //远程调用RMI RMIInterface rmiInterface = null; try { rmiInterface = (RMIInterface) Naming.lookup(RMIInterface.RMI_URL); Object ret = rmiInterface.sayHello("张先生"); System.out.println("测试...

    RMI远程过程调用(远程文件管理)

    java jdk1.8; eclipse 开发环境;实现A机器的程序,可以管理(增加、删除、改等)B机器上的某个文件夹或者目录;掌握远程过程调用原理,基于...客户端利用RMI实现远程调用服务。同时,在在两台机器之间验证结果正确。

    spring RMI 远程接口调用

    Spring RMI(Remote Method Invocation)远程接口调用是Spring框架提供的一个特性,它允许你在分布式环境中调用对象的方法,使得应用程序能够跨越网络边界操作远程对象。这个技术在大型企业级应用中尤其有用,因为它...

    RMI远程调用代码及使用方法

    ### RMI远程调用代码及使用方法 #### 一、RMI简介 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算技术,它允许开发人员在不同的Java虚拟机(JVM)之间进行对象的远程调用。通过...

Global site tag (gtag.js) - Google Analytics