`

Java入门-简单的RMI示例

    博客分类:
  • Java
 
阅读更多

RMI是一种分布式技术,使用RMI可以让一个虚拟机上的应用程序请求调用位于网络上另一处JVM上的对象方法。这是的以分布式方式部署应用成为了可能。

RMI的两个核心所在分别为Skeleton和Stub:

  • Skeleton只在位于服务器端的程序,负责接受客户端发来的请求数据,并交由服务器端业务处理程序处理,最后将处理结果返回给客户端。
  •  Stub则负责在客户端向服务器端发送相关数据。

开发RMI应用程序需要以下几步:

  • 定义远程接口:继承自java.rmi.Remote定义应用接口:IAppInterface
  • 实现服务端对象:需继承自java.rmi.UnicastRemoteObject,同时要实现已定义的接口IAppINterface中的方法
  • 启动RMI注册服务
  • 执行start rmiregistry启动RMI注册服务
  • 启动服务端程序,注册到RMI注册表中
  • 开发并执行客户端程序

在程序中执行java.rmi.registry.LocateRegistry的createRegistry(int port)方法完成RMI注册服务的启动。

java.rmi.registry.Registry接口提供了几个方法来实现对RMI注册表的访问(类似于操作JNDI命名空间的javax.naming.Context接口)

  • void bind(String name, java.rmi.Remote obj):将obj对象绑定在RMI注册表中,键值为name
  • void rebind(String name, java.rmi.Remote obj):重写键值为name的RMI注册表绑定关系,把obj绑定在RMI注册表中,键值为name
  • java.rmi.Remote lookup(String name):在RMI注册表中根据键值name查找对象并返回
  • void unbind(String name):解除键值为name的对象的RMI绑定关系

示例:
1、定义远程接口

package org.eone.test.rmi;
 
import java.rmi.Remote;
import java.rmi.RemoteException;
 
public interface IWeather extends Remote{
    public String getWeather(String city) throws RemoteException;
}

 2、实现远程服务

package org.eone.test.rmi;
 
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
 
public class WeatherImpl extends UnicastRemoteObject implements IWeather{
    public WeatherImpl() throws RemoteException{
    }
    public String getWeather(String city){
        return city + " : is Sunny...";
    }
 
    public static void main(String[] args){
        try{
            Registry registry = LocateRegistry.createRegistry(1099);
            registry.bind("/weather", new WeatherImpl());
            System.out.println("服务对象已绑定至注册表...");
        }catch(Exception e){
            System.out.println("绑定服务对象到注册表失败...");
        }
    }
}

 3、开发并运行客户端程序

package org.eone.test.rmi;
 
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
 
public class WeatherClient{
    public static void main(String[] args){
        try{
            Registry registry = LocateRegistry.getRegistry("127.0.0.1", 1099);
            IWeather stub = (IWeather)registry.lookup("/weather");
            String result = stub.getWeather("SHANGHAI");
            System.out.println(result);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
 
分享到:
评论

相关推荐

    word源码java-fleet-spring-boot:SpringBoot教程,SpringBoot的各种简单示例,快速入门使用Sprin

    的各种简单示例,快速入门使用 Spring Boot 各种组件 示例项目 基础部分: :Spring Boot 快速入门 Hello world 示例 :Spring Boot 自定义 Banner (启动图案) :Spring Boot 主题切换 :Spring Boot 简单的服务...

    java 编程入门思考

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    rmi原理与入门demo.zip

    压缩文件内含有java原始的rmi原理分析及入门示例代码。

    Java初学者入门教学

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    java联想(中文)

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    Hessian学习入门实例

    这是一个Hessian入门学习的实例,程序包是一个web工程,使用intellij idea + Maven开发,其中通过两个方式展示了使用Hessian实现RMI的原理,一个是访问jsp页面,一个是在代码中手工创建client。对于Hessian Servlet...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm ------------------------------------------------- 本教程由yyc,spirit整理 ------------------------------------------------- “Thinking in Java...

    JAVA_Thinking in Java

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    3.1.2 Java事件模型示例 119 3.1.3 JSF事件模型 120 3.1.4 Action事件 122 3.1.5 值改变事件 125 3.1.6 生命周期事件 128 3.1.7 将监听器绑定到Bean属性 130 3.2 JSF的国际化支持 132 3.2.1 加载国际化资源文件 132 ...

    Thinking in Java简体中文(全)

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    Thinking in Java 中文第四版+习题答案

    15.8.5 RMI的替选方案 15.9 总结 15.10 练习 第16章 设计范式 16.1 范式的概念 16.1.1 单子 16.1.2 范式分类 16.2 观察器范式 16.3 模拟垃圾回收站 16.4 改进设计 16.4.1 “制作更多的对象” 16.4.2 用于原型创建的...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    “Thinking in Java”详细目录   写在前面的话 引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 ...

    Think in Java(中文版)chm格式

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 ...

    超爽的自学课件(java)

    除此以外,所有示例都是完整的Java示例,能使大家很快地熟悉Java的外观。 <br>(4) 第4章:初始化和清除 本章开始介绍构建器,它的作用是担保初始化的正确实现。对构建器的定义要涉及函数过载的概念(因为可能...

    RentLio:这是车辆预订系统。 这是用JavaFX制作的,还使用了Hibernate和RMI

    它是用JavaFX制作的,还使用了Hibernate和RMI。 还有现代UI和UX概念以及 。用户界面-行为入门克隆存储库。 git clone https://github.com/Shehanka/RentLio.git 安装 OpenJDK 11.0 或更高版本。 安装MySQL。 运行...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

    ThinkInJava

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

Global site tag (gtag.js) - Google Analytics