Java RMI机制讲解

Java RMI核心技术:动态类加载与远程对象垃圾回收 JVM类加载与RMI动态机制摘要 JVM采用层次化类加载机制,通过双亲委派模型确保安全性,由引导类加载器、扩展类加载器和系统类加载器构成树形结构。在RMI场景中,JVM通过codebase属性实现跨JVM类动态加载,发送方嵌入类位置信息,接收方按需从指定URL下载字节码。关键配置包括useCodebaseOnly参数控制加载来源限制,需配合安全策略文件使用。RMI同时采用基于租约的分布式引用计数管理远程对象生命周期,通过心跳续约和自动回收机制平衡资源占用与可用性。最佳实践强调及时释放远程引用、合理设置租约时 阅读详情

这篇文章主要介绍了Java RMI机制讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

Java RMI

Java RMI之HelloWorld篇

Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。

Java RMI不是什么新技术(在Java1.1的时代都有了),但却是是非常重要的底层技术。 大名鼎鼎的EJB都是建立在rmi基础之上的,现在还有一些开源的远程调用组件,其底层技术也是rmi。

在大力鼓吹Web Service、SOA的时代,是不是每个应用都应该选用笨拙的Web Service组件来实现,通过对比测试后,RMI是最简单的,在一些小的应用中是最合适的。

下面通过一个简单的例子来说明RMI的原理和应用,下面这个例子是一个简单HelloWorld,但已涵盖RMI的核心应用与开发模式。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

/**

* Created by IntelliJ IDEA.

* User: leizhimin

* Date: 2008-8-7 21:50:02

* 定义一个远程接口,必须继承Remote接口,其中需要远程调用的方法必须抛出RemoteException异常

*/

public interface IHello extends Remote {

    /**

     * 简单的返回“Hello World!"字样

     * @return 返回“Hello World!"字样

     * @throws java.rmi.RemoteException

     */

    public String helloWorld() throws RemoteException;

    /**

     * 一个简单的业务方法,根据传入的人名返回相应的问候语

     * @param someBodyName  人名

     * @return 返回相应的问候语

     * @throws java.rmi.RemoteException

     */

    public String sayHelloToSomeBody(String someBodyName) throws RemoteException;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

/**

* Created by IntelliJ IDEA.

* User: leizhimin

* Date: 2008-8-7 21:56:47

* 远程的接口的实现

*/

public class HelloImpl extends UnicastRemoteObject implements IHello {

    /**

     * 因为UnicastRemoteObject的构造方法抛出了RemoteException异常,因此这里默认的构造方法必须写,必须声明抛出RemoteException异常

     *

     * @throws RemoteException

     */

    public HelloImpl() throws RemoteException {

    }

    /**

     * 简单的返回“Hello World!"字样

     *

     * @return 返回“Hello World!"字样

     * @throws java.rmi.RemoteException

     */

    public String helloWorld() throws RemoteException {

        return "Hello World!";

    }

    /**

     * 一个简单的业务方法,根据传入的人名返回相应的问候语

     *

     * @param someBodyName 人名

     * @return 返回相应的问候语

     * @throws java.rmi.RemoteException

     */

    public String sayHelloToSomeBody(String someBodyName) throws RemoteException {

        return "你好," + someBodyName + "!";

    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

/**

* Created by IntelliJ IDEA.

* User: leizhimin

* Date: 2008-8-7 22:03:35

* 创建RMI注册表,启动RMI服务,并将远程对象注册到RMI注册表中。

*/

public class HelloServer {

    public static void main(String args[]) {

        try {

            //创建一个远程对象

            IHello rhello = new HelloImpl();

            //本地主机上的远程对象注册表Registry的实例,并指定端口为8888,这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上

            LocateRegistry.createRegistry(8888);

            //把远程对象注册到RMI注册服务器上,并命名为RHello

            //绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略,下面两种写法都是正确的)

            Naming.bind("rmi://localhost:8888/RHello",rhello);

//            Naming.bind("//localhost:8888/RHello",rhello);

            System.out.println(">>>>>INFO:远程IHello对象绑定成功!");

        } catch (RemoteException e) {

            System.out.println("创建远程对象发生异常!");

            e.printStackTrace();

        } catch (AlreadyBoundException e) {

            System.out.println("发生重复绑定对象异常!");

            e.printStackTrace();

        } catch (MalformedURLException e) {

            System.out.println("发生URL畸形异常!");

            e.printStackTrace();

        }

    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

/**

* Created by IntelliJ IDEA.

* User: leizhimin

* Date: 2008-8-7 22:21:07

* 客户端测试,在客户端调用远程对象上的远程方法,并返回结果。

*/

public class HelloClient {

    public static void main(String args[]){

        try {

            //在RMI服务注册表中查找名称为RHello的对象,并调用其上的方法

            IHello rhello =(IHello) Naming.lookup("rmi://localhost:8888/RHello");

            System.out.println(rhello.helloWorld());

            System.out.println(rhello.sayHelloToSomeBody("熔岩"));

        } catch (NotBoundException e) {

            e.printStackTrace();

        } catch (MalformedURLException e) {

            e.printStackTrace();

        } catch (RemoteException e) {

            e.printStackTrace(); 

        }

    }

}

总结:

从上面的过程来看,RMI对服务器的IP地址和端口www.jsr9.com依赖很紧密,但是在开发的时候不知道将来的服务器IP和端口如何,但是客户端程序依赖这个IP和端口。

这也是RMI的局限性之一。这个问题有两种解决途径:一是通过DNS来解决,二是通过封装将IP暴露到程序代码之外。

RMI的局限性之二是RMI是Java语言的远程调用,两端的程序语言必须是Java实现,对于不同语言间的通讯可以考虑用Web Service或者公用对象请求代理体系(CORBA)来实现。

到此这篇关于Java RMI机制讲解的文章

决策规划算法四:Piecewise Jerk Path Optimizer 一,问题分析 路径规划的本质目的:规划出一条安全(无碰撞),舒适(平滑),符合车辆运动学的轨迹。 如下图所示,决策算法开辟凸空间后,路径规划算法用数值优化的方法搜索出一条最优路径,即将问题转化为二次规划的问题,采用二次规划的求解器进行求解。 二次规划问题的求解顺序: 1,确定优化变量 2,确定目标函数 3,确定约束条件 4,将目标函数和约束条件变形为二次规划的标准形式 5,用二次规划求解器进行求解,获得优化变量的序列,使得目标函数取得最小值。 注:路径的最终表达式为:,.. 阅读详情

相关推荐

博途V17 & PLCSIM & FactoryIO 连接教程

PLCSIM V17 和 FactoryIO 连接教程前言一、软件版本二、连接步骤1. 连接PLCSIM2. 博途编程3.连接FactoryIO总结 前言 该文详细讲解了新手入门博途,并通过使用自带PLCSIM和FactoryIO实现连接。 一、软件版本 TIA Portal V17 S7-PLCSIM V17 Factory IO V2.5.1 二、连接步骤 1. 连接PLCSIM 打开PLCSIM 进入项目模式 新建仿真项目 2. 博途编程 将F

soledad_chao的博客 2万+

Java——RMI详解

RMI 是 Java 提供的一个完善的简单易用的远程方法调用框架,采用客户/服务器通信方式,在服务器上部署了提供各种服务的远程对象,客户端请求访问服务器上远程对象的方法,它要求客户端与服务器端都是 Java 程序。RMI 框架采用代理来负责客户与远程对象之间通过 Socket 进行通信的细节。RMI 框架为远程对象分别生成了客户端代理和服务器端代理。位于客户端的代理必被称为存根(Stub),位于服务器端的代理类被称为骨架(Skeleton)。

吴声子夜歌的博客 9038

国内9大Coding Plan平台实测:CI/CD延迟与开发者体验横评

代码托管平台不仅是Git仓库,更是现代研发流程的‘生产力基建’核心。其底层能力涵盖Git协议优化、CI/CD调度实时性、制品库并发吞吐及RBAC权限收敛效率等关键维度。尤其在团队规模扩张、日均提交激增、多环境高频部署场景下,Webhook延迟、CI排队耗时、制品上传卡顿等应用层性能指标,远比网络层ping值更能决定开发效能。本文基于真实微服务项目(32模块、8.7万行/仓)与三类极端负载(长尾构建、热区冲突、制品洪峰),对国内9个满足Coding Plan标准的平台开展端到端压测,聚焦CI/CD延迟与开发者

weixin_29281941的博客 367

【Java基础】- RMI原理和使用详解

传输层管理实际的连接,并且追踪可以接受方法调用的远程对象。客户端只是调用Stub对象中的本地方法,Stub对象是一个本地对象,它实现了远程对象向外暴露的接口,也就是说它的方法和远程对象暴露的方法的签名是相同的。客户端认为它是调用远程对象的方法,实际上是调用Stub对象中方法,可以理解为Stub对象是远程对象在本地的一个代理,当客户端调用方法的时候,Stub对象会将调用通过网络传输给远程对象。一个虚拟机中的对象调用另一个虚拟机上中的对象的方法,只不过是允许被远程调用的对象要通过一些标志加以标识。

记录总结工作过往 3450

Educoder | 计算机网络实验-IP协议分析

本关任务:使用 Ping 命令发送数据报,用 Wireshark 截获数据报,分析 IP 数据报的格式,理解 IPV4 地址的编址方法,加深对 IP 协议的理解。

Mksg_28的博客 4751

LCD工程师必看:MIPI DSI的LP/HS模式切换全流程拆解(附高通平台实测)

本文为LCD工程师深度解析MIPI DSI接口中低速(LP)与高速(HS)模式切换的全流程。文章结合高通平台实测波形,从协议状态机、时序关键参数到实战调试案例,系统拆解了模式切换的本质、协同机制及常见问题排查方法,重点阐述了LP模式在低功耗控制与HS模式在高速数据传输中的核心作用与切换时序。

weixin_29240711的博客 547

JavaRMI入门详细

JavaRMi入门超详细

weixin_46361305的博客 3728

材料仿真软件:Materials Studio_(14).电学性质计算

设置计算参数,包括 k 点网格、交换相关泛函等。

kkchenjj的博客 1863

Java中的RMI

rmi 是 java中的一种rpc实现 ,提供了一种机制来实现分布式应用的通信和调用远程方法的能力.rmi的独特优势。

ThinkPet 1354

国科大学习资料--计算机视觉(胡占义、董秋雷)--2018-2019第二学期期末试卷

国科大学习资料–计算机视觉(胡占义、董秋雷)–2018-2019第二学期期末试卷 国科大学习资料–计算机视觉(胡占义、董秋雷)–2018-2019第二学期期末试卷 国科大学习资料–计算机视觉(胡占义、董秋雷)–2018-2019第二学期期末试卷 ...

无名何许人的博客 2165

巡检领域红外热成像相机镜头焦距选择方法总结

摘要:巡检机器人红外热成像相机镜头焦距的选择需综合考虑检测距离、视场角、目标分辨率等核心要素。短焦距(4-6mm)适用于室内近距离巡检,中焦距(12-19mm)适合变电站等中等距离场景,长焦距(25-50mm)则用于光伏板等远距离检测。选型需遵循焦距计算公式f=SL×d,确保目标占据≥3×3像元,同时考虑机器人安装空间、环境适应性及软件联动需求。建议通过样机实测或仿真软件验证选型合理性,以实现对设备故障的精准识别。

start_up_go的博客 298

RMI协议详解

RMI(Remote Method Invocation,远程方法调用)是Java中的一种远程通信协议,用于实现跨网络的对象方法调用。RMI协议基于Java的分布式计算,可以让客户端程序调用远程服务器上的方法,使得分布在不同机器上的对象能够通过网络进行通信。RMI协议的实现基于Java的远程对象技术,其中远程对象需要继承java.rmi.UnicastRemoteObject类,并定义远程方法。

技术人集结地 3470

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java中的RPC分布式范例:RMI

业务服务器接收到用户的计算请求后根据特定的算法,将计算的不同部分交由后台的不同主机处理,待结果汇总后,由业务服务器反馈给客户端。在这个过程中,开发人员最为关注的就是计算的分发调度方式,因为这涉及到对网络通讯和并发的控制。如果有一种方式能够将网络通讯和并发控制对程序开发人员透明化,那么将极度简化此类应用的开发成本,RMI就是这样一个范例。

weixin_62282158的博客 449

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

深入分析Java-RMI

文章目录1 介绍2 机制2.1 内部体系架构2.2 原理3 代码示例 1 介绍 java本身的内部中是提供了一种RPC框架-RMI(即Remote Method Invoke,远程方法调用),位于rt.jar包中,以java.rmi开头的package中。 它是一种允许一个对象驻留在一个系统(JVM)来访问/调用一个物体在另一个JVM中运行的机制 2 机制 2.1 内部体系架构 在一个RMI 的...

zcswl7961的博客 1882

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

RMI基础和例子

[b]一 .RMI概述[/b] [b]RMI(Remote Method Invocation)[/b] RMI是分布式对象软件包,它简化了在多台计算机上的JAVA应用之间的通信。必须在jdk1.1以上 [b]RMI用到的类[/b] java.rmi.Remote 所有可以被远程调用的对象都必须实现该接口 java.rmi.server.UnicastRemoteObject 所有可...

来杯咖啡,随便聊聊。 208

利用RMI实现JAVA分布式应用

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 335

JAVA RMI

译自 The Java Tutorials (TraIls: RMI)  RMI应用概述 一个RMI应用通常由两部分组成,即客户端和服务器端。服务器端程序创建若干远程对象(Remote Objects),使这些远程对象对客户端是可访问的,并等待客户端来调用这些远程对象的方法;客户端程序则获取服务器上若干个远程对象的引用,并调用这些其方法。像这种类型的应用被称为Distributed

肖韬的BLOG 1261

Java RMI介绍

        Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。RMI(Remote Method Invocati...

286 185

Java RMI网络编程开发之一 JAVA“进程间”通信方式

原文出自 “JAVAWeb开发” 博客http://6221123.blog.51cto.com/6211123/1111871 注意该标题是 “进程”间通信,而并非“线程“之间的通信。 线程之间的通信是多线程的讨论范畴。这里我们是要讨论分布式的独立的JAVA程序之间是怎么通信的。当然,大家都会先想到SOCKET。对的,SOCKET在网络编程中是不可以被忽略的。socket是两

宁静致远 1597

Java中RMI的使用

此处讲的是Java中的RMI,而不是通用意义上的RMI,关于通用的RMI可以参考分布式之RPC的协议以及错误处理 这篇文章。 一、Java RMI简介 Java RMI用于不同虚拟机之间的通信,这些虚拟机可以在不同的主机上、也可以在同一个主机上;一个虚拟机中的对象调用另一个虚拟上中的对象的方法,只不过是允许被远程调用的对象要通过一些标志加以标识。这样做的特点如下: 优点:避免重复造轮子; ...

sinat_38380922的博客 405

RMI规范(2)

RMI规范--第二章 Java 分布式对象模型 2.1 分布式对象应用程序 RMI 应用程序通常包括两个独立的程序:服务器程序和客户机程序。典型的服务 器应用程序将创建多个远程对象,使这些远程对象能够被引用,然后等待客户机 调用那些远程对象上的方法。而典型的客户机程序则从服务器中得到一个或多个 远程对象的引用,然后调用远程对象的方法。RMI 为服务器和客户机进行通讯 和信息传递提供了一种机

morningbird的专栏 1986

RMI学习以及深入理解

转自:http://blog.163.com/eye_ziye/blog/static/21447105120131127105623452/ Java RMI (Remote Method Invocation 远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式...

活成自己想要的模样 574

Java远程方法调用RMI简单介绍

RMI介绍 RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.1中实现的。经过多个JDK版本迭代,目前RMI的实现方式跟最开始底层实现还是有很大差别的。远程方法调用允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。 RMI使用JRMP(...

zhuguanghalo的博客 312

利用rmi实现java分布式应用

Java RMI (Remote Method Invocation 远程方法调用)是用Java在JDK1.1中实现的,他大大增强了Java研发分布式应用的能力。Java作为一种风靡一时的网络研发语言,其巨大的威力就体目前他强大的研发分布式网络应用的能力上,而RMI就是研发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实他能被看作是RPC的 Java版本。不过传统RPC并不能非常好地...

u011310912的博客 189

Java RMI 深入详解

Java RMI(远程方法调用)是Java提供的分布式对象通信机制,支持不同JVM之间的方法调用,基于TCP Socket和对象序列化实现。其核心包括远程对象、Stub/Skeleton代理、RMI注册表等组件,开发流程涉及定义远程接口、实现服务端和客户端。RMI支持动态Stub生成、对象序列化和远程异常处理,适合小型分布式应用和教学场景,但性能有限。现代框架如Dubbo/gRPC在多语言支持、性能等方面更具优势。RMI适用于理解分布式原理,生产环境建议选择更强大的替代方案。

onlymscn的博客 1866

rmi远程调用被拒绝_简单的RMI实现

1.分布式计算机基本理解什么是分布式计算?简单来说,就是“由于任务量巨大,一台计算机无法短时间内完成,所以把一个任务分给其他一台甚至多台计算机来完成”2.分布式计算与通信的区别很好理解,通信是client和server之间互相发送信息;而分布式计算是一台计算机调用其他计算机的方法或者发布任务,然后接收返回结果。分布式计算肯定是要通信的,但通信只是手段不是目的。3.分布式体系结构模型最简单的分布式是...

weixin_39631953的博客 354
上一篇: 汇编语言与计算机系统结构笔记18】MIPS指令集与汇编程序设计 & 异常处理
陈萍萍儿
博客等级 码龄5年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值