RMI规范--六

Java远程方法调用(RMI)技术详解 Java RMI(远程方法调用)采用三层架构实现分布式通信,包含注册表服务、服务端和客户端三大核心组件。服务端通过导出远程对象并绑定到注册表,客户端通过接口契约查找并调用远程方法。RMI采用租约机制管理远程对象生命周期,通过引用计数和定期续租实现分布式垃圾回收。开发时需要严格分离服务端与客户端代码,通过模块化部署确保安全性,并注意注册表必须与服务器同机部署。RMI架构隐藏了底层网络通信细节,使远程调用语法与本地调用保持一致,同时处理了对象定位、参数序列化和异常处理等分布式环境下的复杂问题。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 注册服务程序接口 --------------------------------------------------------------------- ---------- 第 6 章 RMI 系统使用 java.rmi.registry.Registry 接口和 java.rmi.registry.Locat eRegistry 类来为按名字检索和注册对象提供众所周知的自举服务。 registry 是一种将名字映射到远程对象的远程对象。所有的服务器进程都支持自 己的注册服务程序或能为主机所用的单个注册服务程序。 LocateRegistry 方法用于使注册服务程序在特定的主机中或主机与端口中运行起 来。java.rmi.Naming 类方法用于调用一个远程对象,该对象使用恰当的 Locat eRegistry.getRegistry 方法来实现 Registry 接口。 主题: Registry 接口 LocateRegistry 类 RegistryHandler 接口 6.1 Registry 接口 java.rmi.registry.Registry 远程接口可为查询、绑定、再绑定、取消绑定和列 出注册服务程序内容提供方法。java.rmi.Naming 类用 registry 远程接口提供 基于 URL 的命名。


package java.rmi.registry; 



public interface Registry extends java.rmi.Remote { 

public static final int REGISTRY_PORT = 1099; 

public java.rmi.Remote lookup(String name) 

throws java.rmi.RemoteException, 

java.rmi.NotBoundException, java.rmi.AccessException; 

public void bind(String name, java.rmi.Remote obj) 

throws java.rmi.RemoteException, 

java.rmi.AlreadyBoundException, java.rmi.AccessException; 

public void rebind(String name, java.rmi.Remote obj) 

throws java.rmi.RemoteException, java.rmi.AccessException; 

public void unbind(String name) 

throws java.rmi.RemoteException, 

java.rmi.NotBoundException, java.rmi.AccessException; 

public String[] list() 

throws java.rmi.RemoteException, java.rmi.AccessException; 

} 



REGISTRY_PORT 是注册服务程序的缺省端口。 lookup 方法返回绑定到指定 name 的远程对象,而远程对象则实现一组远程接口 。客户机可将远程对象强制转换为所期望的远程接口类型(该强制类型转换可能 以它在 Java 语言中的常见失败方式而失败)。 bind 方法将 name 与远程对象 obj 相关联。如果名字已绑定到某一对象上,则 抛出 AlreadyBoundExcepton。 rebind 方法将 name 与远程对象 obj 相关联。该名字以前的所有绑定均将被丢 弃。 unbind 方法删除 name 和远程对象 obj 之间的绑定。如果名字并未绑定到某一 对象上,则抛出 NotBoundException。 list 方法返回一个 Strings 数组,其中包含注册服务程序中所绑名字的快照。 该返回值含有注册服务程序内容的快照。 客户机可以使用 LocateRegistry 和 Registry 接口或基于 URL 的 java.rmi.N aming 类的方法来访问注册服务程序。该注册服务程序仅支持与服务器位于同一 主机的客户机的 bind、unbind 和 rebind。所有主机均可进行查询操作。 .2 LocateRegistry 类 java.rmi.registry.LocateRegistry 类用来获得对特定主机(包括本地主机)的 引导远程对象注册服务程序的引用(创建 stub),或者创建能在特定端口接受调 用的远程对象注册服务程序。 注册服务程序实现将远程对象名(字符串)与远程对象引用相关联的简单命名语 法。服务器重新启动不会记住这些名字和远程对象之间的绑定。 注意,getRegistry 调用并不真正与远程主机连接。它只简单地建立了对远程注 册服务程序的本地引用,且即使远程主机中没有注册服务程序运行也将获得成功 。因此,对于该方法作为返回值返回的远程注册服务程序进行进一步的方法调用 时,可能会导致失败。


package java.rmi.registry; 



public final class LocateRegistry 

{ 

public static Registry getRegistry() 

throws java.rmi.RemoteException; 

public static Registry getRegistry(int port) 

throws java.rmi.RemoteException; 

public static Registry getRegistry(String host) 

throws java.rmi.RemoteException; 

public static Registry getRegistry(String host, int port) 

throws java.rmi.RemoteException; 

public static Registry getRegistry(String host, int port, 

RMIClientSocketFactory csf) 

throws RemoteException; 

public static Registry createRegistry(int port) 

throws java.rmi.RemoteException; 

public static Registry createRegistry(int port, 

RMIClientSocketFactory csf, 

RMIServerSocketFactory ssf) 

throws RemoteException; 

} 

前四个 getRegistry 方法返回对当前主机、指定 port 的当前主机、指定的 ho st 或指定 host 的特定 port 的注册服务程序引用。所返回的是带有指定主机和 端口信息的注册服务程序的远程 stub。 第五个 getRegistry 方法(将 RMIClientSocketFactory 作为参数)返回本地创 建的远程 stub,它对应于指定 host 和 port 上的远程对象 Registry。与用该 方法构造 stub 的远程注册服务程序进行通信时,将使用所提供的 RMIClientSo cketFactory、csf 来创建到远程主机和端口的注册服务程序的 Socket 连接。 ---------------------------------------------------------------------- ---------- 注意 - 从 getRegistry 方法返回的注册服务程序是含有已知对象标识符的专门 构造的 stub。目前仍不支持将注册服务程序 stub 从一个虚拟机传给另一个虚拟 机(其有效性将取决于实现)。使用 LocateRegistry.getRegistry 方法可以获 得主机的相应注册服务程序。 ---------------------------------------------------------------------- ---------- createRegistry 方法创建和导出特定 port 的本地主机的注册服务程序。 第二种 createRegistry 方法在与注册服务程序通信时更富有灵活性。该调用将 在本地主机中创建和导出 Registry,本地主机使用自定义套接字工厂用于与注册 服务程序的通信。所创建的注册服务程序在给定的 port 上使用从 RMIServerSo cketFactory 所创建的 ServerSocket 监听到来请求。接收到注册服务程序引用 的客户机将使用从 RMIClientSocketFactory 所创建的 Socket。 ---------------------------------------------------------------------- ---------- 注意 - 使用 createRegistry 方法启动注册服务程序不能保持服务器进程的活动 性。 6.3 RegistryHandler 接口 ---------------------------------------------------------------------- ---------- 注意 - JDK1.2 中不鼓励使用 RegistryHandler 接口。JDK1.1 中,它仅由 RMI 实现在内部使用,而不能用于应用程序。 ---------------------------------------------------------------------- ----------




package java.rmi.registry; 



public interface RegistryHandler 

{ 

Registry registryStub(String host, int port) 

throws java.rmi.RemoteException, java.rmi.UnknownHostException; 

Registry registryImpl(int port) throws java.rmi.RemoteException; 

} 

方法 registryStub 返回一个与位于指定主机和端口的远程注册服务程序进行联 系的 stub。 方法 registryImpl 将构造并导出位于指定的端口的注册服务程序。端口必须为 非零。 RMI规范--二 RMI规范--三 RMI规范--四 RMI规范--五 RMI规范--六 RMI规范--七 RMI规范--八 RMI规范--九
Rpc与RMI服务 在本篇的结尾,我们来个彩蛋,还记得上面RMI的注册表吗?前面我们是通过JDK的exe程序启动的,那么我们能不能自己开发或者自己启动RMI注册表呢?其实是可以的,在包中有个Registry接口,并且该接口有个默认的实现类,其实JDK源码中Naming类就是使用的实现的注册和调用,那么我们来看看的方法:自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。 阅读详情

相关推荐

Reactor 响应式编程(第一篇:Reactor核心)

响应式:响应式编程: 全异步、消息、事件回调默认还是用当前线程,生成整个流、发布流、流操作.log();//只要不指定线程池,默认发布者用的线程就是订阅者的线程;

moments的博客 1573

java RMI原理详解

定义 RMI(Remote Method Invocation)为远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。 Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里

xinghun_4的专栏 3万+

快速修改Petalinux编译生成的rootfs.cpio.gz文件:无需重新编译的实用技巧

本文详细介绍了如何在不重新编译的情况下快速修改Petalinux生成的rootfs.cpio.gz文件,适用于Zynq平台开发。通过解包image.ub、修改rootfs内容并重新打包的完整流程,可显著提升调试效率,特别适合频繁修改配置文件的场景。文章还提供了自动化脚本和进阶应用技巧,帮助开发者优化工作流程。

weixin_28285943的博客 242

RMI规范(4)

RMI规范--第四章 客户机接口 程序员在编写使用远程对象的 applet 或应用程序时,需要注意 java.rmi 包 中可用的 RMI 系统客户机可视接口。 4.1 远程接口 package java.rmi; public interface Remote {} java.rmi.Remote 接口用来识别所有远程接口;所有远程对象必须直接或间接 实现此接口。 实现类可以

morningbird的专栏 1257

保姆级教程:用AD20破解版从安装到汉化,一次搞定PCB设计环境搭建

本文提供AD20从安装到汉化的保姆级教程,详细解析环境配置、核心功能及高效操作技巧,帮助电子设计工程师快速掌握PCB设计工具。涵盖系统准备、界面定制、原理图设计、PCB布局布线等关键步骤,特别适合初学者避开常见陷阱。

weixin_30555125的博客 220

大数据开发工程师必备面试题与解答

大数据开发岗位一直是互联网行业的热门方向,面试过程中既考察基础知识,也关注实际项目经验和问题解决能力。本文整理了等核心组件相关的高频面试题及参考解答,帮助大家高效准备面试。大数据面试不仅考察基础理论,更看重项目经验与问题解决能力。本文涵盖了等核心知识点及调优思路,希望能帮助你在面试中游刃有余。

X2829352498的博客 305

RMI规范(6) --(10)

RMI规范(6) 注册服务程序接口 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- 第 6 章 RMI 系统使用 java.

bluevoyage的专栏 1万+

第4章-上下文管理-对话历史记忆系统与窗口优化-《Agentic AI 智能体应用开发》

当上下文窗口接近极限时,需要对已有内容进行压缩。压缩不是简单的截断——你需要保留核心语义,去除冗余。# Python: 对话摘要压缩# 使用 Haiku 做摘要任务,成本最低"""将一段对话历史压缩为摘要"""system="你是一个对话摘要专家。请生成简洁但有信息量的摘要。",f"'用户'

AI天才研究院 251

RMI规范(3)

RMI规范--第三章 主题: Stub 与 skeleton 远程方法调用中的线程使用 远程对象的垃圾收集 动态类的加载 通过代理服务器透过防火墙的 RMI 3.1 Stub 与 skeleton 在与远程对象的通信过程中,RMI 将使用标准机制(用于 RPC 系统):stub 与 skeleton。远程对象的 stub 担当远程对象的客户本地代表或代理人角色。 调用程序将调用本地 s

morningbird的专栏 1183

【Segment Anything Model】三:SAM模型微调自定义数据集,更改混合提示方式:点,框,点框混合

1.微调SAM预备知识。

cvxiayixiao的博客 1万+

亿图机床采集数据

这个数控系统的英文名是HUST,在台湾知名度还可以,但大陆这边我做这么多年项目也只接触过屈指可数的几次,可见市场占有率并不大,联网采集不复杂。

若云流风的专栏 2499

RMI规范(2)

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

morningbird的专栏 1989

【从零开始学习 UVM】1.1、UVM 概述 —— Preface

【从零开始学习 UVM】1.1、UVM 概述 —— Preface

努力,加油每一天鸭~ 828

RMI规范(5)

RMI规范--第五章 服务器接口 java.rmi.server 包包含通常用于实现远程对象的接口与类。 主题: RemoteObject 类 RemoteServer 类 UnicastRemoteObject 类 Unreferenced 接口 RMISecurityManager 类 RMIClassLoader 类 LoaderHandler 接口 RMI 套接字工厂 RMIFai

morningbird的专栏 1167

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

RMI介绍

      其实我近日有想法要请总坛主开设Java分布式应用版块,专门讨论Java分布式应用。如Jini,CORBA,RMI,RMI-IIOP等。更进一步,还包括各种技术之间的通讯等问题。比如RMI-IIOP和CORBA通讯,Jini访问CORBA对象,EJB到CORBA映射等高级问题。不过暂时还没有实现。所以姑且在此先讨论一下这些东西好了。RMI是Sun基于Java技术推出的一种分布式应用方案。

天高任鸟飞,海阔凭鱼跃 2751

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

RMI规范--第二 -- 五章

?RMI规范--第二章 Java 分布式对象模型 。。RMI规范--第三章 主题: Stub 与 skeleton;; 远程方法调用中的线程使用 ;;远程对象的垃圾收集;;动态类的加载;;通过代理服务器透过防火墙的 RMI ;;。。RMI规范--第四章 客户机接口;; 程序员在编写使用远程对象的 applet 或应用程序时,需要注意 java.rmi 包中可用的 RMI 系统客户机可视

bluevoyage的专栏 1694

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

RMI规范(10)

RMI 通信协议 10.1 概述 RMI 协议使用另两个协议作为其在通信格式:Java 对象序列化和 HTTP。对象序 列化协议用于编组调用和返回数据。HTTP 协议用于“投寄”远程方法调用,并在 情况允许时获得返回数据。每种协议都有专门的语法文档。产品规则中的非终结 符号可能会引用其它协议(对象序列化或 HTTP)所管理的规则。在跨协议边界时 ,后续产品将使用该嵌入的协议。 关于语法符号

morningbird的专栏 1024

【Dongle】【Java】规范之RMI

RMI(Remote Method Invoke):remote(遥远的) invoke(调用),RMI是一种被EJB使用的更底层的协议,能够让在某个Java虚拟机上的对象像调用本地对象一样调用另一个java 虚拟机中的对象上的方法。

郑晓东 廊坊师范学院信息技术提高班 十二期 657

RMI规范–第十章 RMI 通信协议

RMI规范–第十章 RMI 通信协议 (转贴) 10.1 概述RMI 协议使用另两个协议作为其在通信格式:Java 对象序列化和 HTTP。对象序列化协议用于编组调用和返回数据。HTTP 协议用于“投寄”远程方法调用,并在情况允许时获得返回数据。 每种协议都有专门的语法文档。产品规则中的非终结符号可能会引用其它协议(对象序列化或 HTTP)所管理的规则。在跨协议边界时,后续产品将使用该...

jybzjf的专栏 1434

RMI规范--五

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专栏 442

RMI规范--四

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专栏 262

RMI规范

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专栏 443

什么是RMI

大家好,我是IT修真院武汉分院第15期的学员,一枚正直纯洁善良的JAVA程序员。今天给大家分享一下,修真院官网JAVA任务8的知识点——什么是RMI 1.背景介绍 2.知识剖析 3.常见问题 4.编码实战 5.扩展思考 6.参考文献 7.更多讨论   1.背景介绍 RMI全称是Remote Method Invocation-远程方法调用,是纯Java的网络分布式应用系统的核心...

qq_42218123的博客 4011

从懵逼到恍然大悟之Java中RMI的使用

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

lmy86263的博客 8万+

RMI 规范

RMI(基本概念) Java Remote Method Invocation ( RMI -- Java 远程方法调用)允许您使用Java 编写分布式对象,不同的Java 虚拟机(JVM)之间进行对象间的通讯。这些JVM 可以在一台者多台计算机上,使得应用程序(Application) 可以远程调用方法,共享各个系统的资源和处理能力。  RMI 的主要优点 面向对象: RMI 可将完整的

忧郁王子的专栏 2667

Java之RMI和JNDI

文章目录1 RMI1.1 rmi概念1.2 RMI基础运用1.2.1 定义一个远程的接口1.2.2 编写一个远程接口的实现类1.2.3 创建服务器实例1.2.4 编写客户端并且调用远程对象1.3 RMI反序列化攻击1.3.1 定义远程接口1.3.2 远程接口实现1.3.3 服务器1.3.4 客户端2 JNDI2.1 概念2.2 JNDI结构2.2.1 InitialContext类2.2.2 Reference类2.3 JNDI注入攻击2.4 JNDI注入+RMI实现攻击2.4.1 RMIServer代码2

上善若泪 2539
上一篇: RMI规范--五
下一篇: RMI规范--三
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值