RMI资料详解

合集下载

6第六讲 RMI技术

6第六讲 RMI技术

第六讲 RMI技术主要内容* RMI的概述* RMI的应用开发步骤* 命名服务* 远程方法调用的不同形式RMI概述* 为什么要使用RMI(Remote Method Invocation, RMI)?* RMI的基本工作原理;* Stub的自动生成.为什么要使用RMI?* RMI允许不同的Java虚拟机之间进行对象间的通信,从而共享各个虚拟机上的资源和处理能力。

* RMI的目的是使分布在不同的虚拟机中的对象工作起来像是本地对象,以达到位置透明性,应用程序不用知道对象是本地还是远程的,屏蔽应用程序对底层的复杂实现细节。

RMI的基本工作原理1.调用者用通常方式调用对应Java的一个远程对象的方法;2.这个顾客Stub的功能把有关的参数组装成一个消息包或一组消息包。

运行此方法的那个站点的“地址”和那个站点上对象及方法的“标识符”、调用方法的参数,都应包含在这条消息中;3.将这消息发送给对应的RMI runtime系统,该子程序再转至指定的站点;4.在接收此消息时,远程RMI runtime系统引用与被调用者对应的服务者Stub,并让它来处理这条消息;5.服务者Stub,反序列化有关的参数,并用本地方法调用方式调用所需的方法。

然后把调用结果序列化,向调用者返回调用结果;6.调用者方RMI runtime系统接收返回调用结果。

调用者Stub反序列化参数,然后,返回调用结果到调用方法。

* 与用户对应的Stub如何知道实际运行远程过程的结点的地址呢?(通过命名服务).* 传输部分的功能:(1)提供RMI协议的选择;(2)建立/释放逻辑信道,发送/接收消息等;(3)管理RMI中的消息缓冲区。

* 控制部分的主要功能是: (1)确定RMI中消息的方向(发送或接收)。

当顾客Stub开始RMI调用或者服务者Stub返回调用结果时,该部分负责控制传输部分进行传输。

 (2)结点间会合与进程同步。

结点间会合是指为使两个结点间进程同步,即早到达的进程要等待晚到达的进程,会话进程通过结点间会合建立一致的起点,并以该起点作为进程同步点进行对话。

rmi认证标准(一)

rmi认证标准(一)

rmi认证标准(一)RMI认证标准简介RMI(Remote Method Invocation)是一种在分布式系统中通过网络实现远程方法调用的技术。

它允许程序在不同的Java虚拟机(JVM)上进行通信和交互,提供了便捷的远程对象访问和调用方式。

RMI认证的重要性在分布式系统中,因为涉及跨网络的通信,安全性成为一个非常重要的问题。

RMI认证标准的出现,旨在确保远程调用的安全性和可靠性。

RMI认证标准的原则RMI认证标准主要基于以下原则:1.身份认证:确保通信双方的身份真实可信,避免伪造身份进行非法操作。

2.数据完整性:保证数据在传输过程中不被篡改或损坏,防止信息泄露和数据丢失。

3.数据机密性:提供数据传输的加密机制,防止信息被窃取或监听。

4.可靠性:保证通信的稳定性和可靠性,避免数据丢失或通信中断。

RMI认证实现方式以下是几种常用的RMI认证实现方式:•基于密码的认证:通信双方在建立连接时,通过验证密码或密钥来进行身份认证。

这种方式简单高效,但若密码泄露则安全性受到威胁。

•基于数字证书的认证:通过使用数字证书对通信双方的身份进行验证。

数字证书包含了公钥、证书颁发机构(CA)的签名等信息,通过验证证书的合法性,可以确保通信双方的身份真实可信。

•基于加密算法的认证:使用对称加密算法或公钥加密算法对通信数据进行加密,确保数据的机密性和完整性。

加密算法的选择和使用密钥管理等方面对安全性至关重要。

•基于防火墙的认证:通过防火墙对网络流量进行过滤和验证,仅允许符合一定要求的通信通过。

防火墙可以配置访问控制策略,限制只有通过认证的主机才能建立连接,从而增加通信的安全性。

RMI认证的未来发展随着互联网技术的不断发展,RMI认证标准也在不断完善和演进。

未来,我们可以预见以下发展趋势:1.多因素认证:结合密码、生物特征等多种因素进行认证,提高身份验证的安全性。

2.智能合约认证:通过智能合约实现自动化、去中心化的认证过程。

分布式计算第3讲RMI

分布式计算第3讲RMI

远程引用层和传输层

远程引用层定义和支持RMI连接的调用语法、语义,远 程引用层还为上一层屏蔽了服务程序的激活方式。 传输层建立于TCP/IP之上,主要负责Java虚拟机之间 的连接,侦听调用请求,建立连接,管理和监视连接。
2、RMI API 调用过程
3、RMI程序基本开发方法

实现RMI程序必须使用RMI包,包括7个包:
import java.rmi.*; public interface RMIHelloInterface extends java.rmi.Remote{ public String helloWorld()throws java.rmi.RemoteException; public String sayHelloToSomeBody(String someBodyNmae)throws java.rmi.RemoteException; }
对象接口定义

Java提供了接口与类两种机制:

接口不含数据表示方法与操作的具体实现,因而适用于定义对象的规格 说明(specification),一个接口可以同时继承多个接口;

类给出了数据表示方法与操作实现,因而适用于定义对象的实现 (implementation),仅支持对类的单继承。
所有远程对象的接口都使用接口来定义,并且必须继承 java.rmi.Remote 接 口, 还 要 求 其中 的 每 一 个方 法 必 须声明 抛 出 java.rmi.RemoteException异常,因为网络通信或服务程序等原 因均可能导致远程调用失败。
使用RPC,客户应用程序可以调用在远程计算机上执行的C语言函数,将客户 程序与服务程序之间的通信接口抽象为过程调用层次。 程序员可像调用本地过程 一样去调用远程过程。 RPC系统完成参数与返回 值的打包、解包与传输等 底层任务。 但使用RPC不能平滑地

rmi方法

rmi方法

"RMI"可以指代多种不同的技术或概念,具体取决于上下文。

以下是几种可能的解释:1. 远程方法调用(Remote Method Invocation):在计算机网络编程中,RMI 是一种编程模型,它允许一个Java虚拟机(JVM)上的对象调用另一个JVM上对象的方法。

这种调用像是在进行本地方法调用一样简单直观,但实际上涉及到网络通信。

RMI使用了Java的序列化机制来传输对象状态,并支持不同类型的传输协议,包括Java RMI、HTTP、HTTPS等。

2. 报告管理接口(Report Management Interface):在企业应用程序中,RMI 可能指的是用于管理和处理报告的接口。

这些报告可能涉及财务数据、业务性能、客户信息等,并且可能用于决策支持系统(DSS)。

3. 资源管理接口(Resource Management Interface):在计算机系统管理中,RMI可能指的是用于管理系统资源的接口,如CPU、内存、存储等。

4. 反射性方法调用(Reflective Method Invocation):在某些编程框架中,RMI可能指的是使用反射机制来调用方法的方式。

反射机制允许程序在运行时检查和修改其结构和行为。

如果你指的是远程方法调用(RMI),那么在Java中使用RMI通常涉及以下步骤:- 创建一个远程接口,该接口扩展了Java的Remote接口,并定义了需要远程调用的方法。

- 实现这个远程接口,并将实现类暴露给网络。

- 在客户端,创建这个远程接口的代理对象,通过网络调用远程服务器上的方法。

为了使用Java RMI,还需要使用Java RMI库中的类和方法来配置和启动网络通信。

这可能包括使用RMISocketFactory来创建套接字,以及使用RMIContext 来管理安全性和其他网络通信的细节。

请注意,随着Java技术的不断发展,RMI可能不再是唯一的远程调用解决方案,其他技术如Web服务(SOAP和RESTful)、消息传递(如RabbitMQ和Apache Kafka)等,也可能用于实现分布式系统中的远程方法调用。

介绍一下RMI的基本概念

介绍一下RMI的基本概念

什么是RMIRMI(Remote Method Invocation)远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样。

RMI的用途1、分布式体系结构为什么要使用分布式计算呢?当我们想与多个用户或客户机共享一个中央资源(如一个数据库)时,就会使用分布式计算。

分布式计算用来利用多个系统的组合计算能力,以便比在单个系统上更有效或更快地解决问题。

可以用多种方法配置多个计算机系统以共享处理,包括共享内存、共享磁盘或只是共享一条公共通信通道。

最新的技术允许物理上相隔很远的系统能够在处理计算问题时协同工作。

关于利用计算能力这一主题,因特网及伴随的通信协议 TCP/IP 的出现已使无数的计算机系统史无前例地连接起来。

对一些应用程序来说,能够利用如此多的计算功能来解决问题是令人满意的。

甚至更吸引人的是,大多数计算机系统都有充足的空闲时间,可以帮助解决其它问题。

将来,网格计算会利用分布式计算能力进行出售,这与电力行业出售电能非常相似。

2、Java分布式对象编程技术RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。

只要按照RMI规则设计程序,可以不必再过问在RMI之下的网络细节了,如:TCP和Socket等等。

任意两台计算机之间的通讯完全由RMI负责。

调用远程计算机上的对象就像本地对象一样方便。

RMI应用程序分类依据RMI应用程序各部分职责,可对应用程序进行如下分类:服务器程序:服务器程序将创建多个远程对象,并使每个对象能够被引用。

等待客户端调用创建好的远程对象上的方法。

客户端程序:从服务端程序中得到一个或多个远程对象的引用。

客户端能用此引用调用远程对象上的方法。

对等计算程序:双方地位相等,互为对方的服务器和客户端。

RMI资料详解

RMI资料详解

二,RMI系统运行机制
客户端的JVM 客户端的 应用程序 Stub Method1() () Method2() () 数据流
服务器端的JVM 服务器端的 Remote Method1() () Method2() ()
返回值 参数
Skeleton Method1() () Method2() ()
一,RMI概述 概述
2,RMI的目的 , 的目的 RMI的根本目的就是给应用程序开发者提供一个调用 的根本目的就是给应用程序开发者提供一个调用 远程对象方法的抽象功能,而不必采用低级通信. 远程对象方法的抽象功能,而不必采用低级通信.这样用 java开发的分布式应用程序可以完全是面向对象的,可以 开发的分布式应用程序可以完全是面向对象的, 开发的分布式应用程序可以完全是面向对象的 使用面向对象的开发方法进行设计. 使用面向对象的开发方法进行设计. RMI目前使用 目前使用Java远程消息交换协议 远程消息交换协议JRMP(Java 目前使用 远程消息交换协议 ( Remote Messaging Protocol)进行通信.JRMP是专 )进行通信. 是专 的远程对象制定的协议. 为Java的远程对象制定的协议.因此,Java RMI具有 的远程对象制定的协议 因此, 具有 Java的"Write Once,Run Anywhere"的优点,是分布 的 , 的优点, 的优点 式应用系统的百分之百纯Java解决方案.用Java RMI开 解决方案. 式应用系统的百分之百纯 解决方案 开 发的应用系统可以部署在任何支持JRE(Java Run 发的应用系统可以部署在任何支持 ( Environment Java,运行环境)的平台上. ,运行环境)的平台上.
二,RMI系统运行机制

JAVARMI和JNDI简单学习

JAVARMI和JNDI简单学习

JAVARMI和JNDI简单学习⼀、RMI概述 java RMI(remote method invocation)即远程⽅法调⽤,是允许运⾏在⼀个java虚拟机上的对象调⽤运⾏在另外⼀个java虚拟机上的对象的⽅法,JAVA RMI实现JAVA程序之间跨越JVM的远程通信。

通过RMI可以让调⽤远程JVM上对象⽅法,仿佛调⽤本地JVM上对象⽅法⼀样简单、快捷。

⼆、RMI框架RMI主要有三个⾓⾊:RMI客户端、RMI服务端、注册表RMI过程⼤体如下: 1.客户端从RMI注册表中查询并获取远程对应引⽤。

客户端⾸先会与Stub进⾏交互,stub将远程⽅法所需的参数进⾏序列化后,传递给远程应⽤层RRL 2.stub和远程对象具有相同的接⼝和⽅法列表,当客户端调⽤远程对象时,实际是有stub对象代理的。

RRL将stub本地引⽤转换为服务端上对象的远程引⽤后,再将调⽤传递给传输层,传输层执⾏TCP发送 3.RMI服务端传输层监听到请求后,将引⽤转发给服务端的RRL。

4.服务端RRL将客户端发送的远程应⽤转换为本地虚拟机引⽤后,传递给Skeleton。

5.Skeleton读取参数,最后由服务端进⾏实际⽅法调⽤。

6.如果RMI客户端调⽤存在返回值,则以此向下传递。

7.客户端接收到返回值后,再以此向上传递。

然后由stub反序列化返回值,最终传递给RMI客户端相关类关系如下:三、RMI开发流程1.RMI服务端(1)远程调⽤对象类: 1.1 定义⼀个继承Remote接⼝的interface A,接⼝中的⽅法需要抛出RemoteException 1.2 远程调⽤对象类需继承UnicastRemoteObject类和interface A(2)启动注册表并绑定对象2.RMI客户端(1)定义⽤于接收远程对象的Remote⼦接⼝,只需实现java.rmi.Remote接⼝即可。

但要求必须与服务器端对等的Remote⼦接⼝保持⼀致,即有相同的接⼝名称、包路径和⽅法列表等(2)通过注册表查询需要调⽤的对象,并强制转换成客户端定义的类(3)进⾏⽅法调⽤远程调⽤对象类import java.rmi.Remote;import java.rmi.RemoteException;public interface Hello extends Remote {public String welcome(String name) throws RemoteException;}import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class HelloImpl extends UnicastRemoteObject implements Hello{public HelloImpl() throws RemoteException {}public String welcome(String name) throws RemoteException {return "Hello, " + name;}}创建RMI服务端import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;public class Server {public static void main(String[] args) throws RemoteException {// 创建对象Hello hello = new HelloImpl();// 创建注册表Registry registry = LocateRegistry.createRegistry(10999);// 绑定对象到注册表,并给他取名为helloregistry.rebind("hello",hello);System.out.println("创建服务端成功!");}}创建RMI客户端import java.rmi.NotBoundException;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;public class Client {public static void main(String[] args) throws RemoteException, NotBoundException {// 获取到注册表的代理Registry registry = LocateRegistry.getRegistry("localhost", 10999);// 利⽤注册表的代理去查询远程注册表中名为hello的对象Hello hello = (Hello) registry.lookup("hello");// 调⽤远程⽅法System.out.println(hello.welcome("tridentj"));}}简单本地运⾏的效果如下:也可以通过Naming类创建,Naming相当于对Registry进⾏了封装,部分Naming源代码如下:Naming封装简单⽰例:import java.rmi.Naming;import java.rmi.registry.LocateRegistry;public class NamingServer {public static void main(String[] args) {运⾏效果如下:四、JNDIJNDI (JAVA Naming And Directory Interface )是JAVA 命名和⽬录接⼝。

RMI 的运行逻

RMI 的运行逻

RMI 的运行逻
RMI(远程方法调用)是一种在分布式系统中进行远程通信的技术,其运行逻辑如下:
客户端调用远程对象方法:客户端通过本地接口调用远程对象的方法,就像调用本地对象一样。

1.Stub 封装调用参数:本地接口的实现对象,也就是Stub,会将客户端调用方法的参数进行封装,以便进行传输。

2.远程传输:Stub 将封装好的参数通过网络传输给远程对象,即服务器端的Skeleton。

3.Skeleton 解封装参数:Skeleton 接收到远程传输的参数后,将其解封装,并调用实际的远程对象方法进行处理。

4.远程方法调用:远程对象执行客户端请求的方法,返回结果。

5.Skeleton 返回结果:Skeleton 将远程对象执行方法的结果封装,通过网络传输回客户端。

6.Stub 接收结果:Stub 接收到远程传输的结果后,将其解封装,返回给客户端。

RMI 的运行逻辑可以简单地概括为客户端通过本地接口调用远程对象方法,而Stub 和Skeleton 则负责将调用参数和结果进行封装和解封装,并进行网络传输。

这种运行逻辑使得远程方法调用看起来像是本地方法调用一样简单,同时也可以在分布式系统中实现不同节点之间的通信,方便地进行远程操作和数据传输。

RMI学习

RMI学习

一、术语介绍 • 1、存根:当客户端要调用远程对象的一个方法时,实际 上调用的是代理对象上的一个普通方法,我们称此代理对 象为存根(stub)。存根位于客户端机器上,而非服务器 上。 • 2、参数编组:存根会将远程方法所需的参数打包成一组 字节,对参数编码的过程就称为参数编组。参数编组的目 的是将参数转换成适合在虚拟机之间进行传递的格式,在 RMI协议中,对象是使用序列化机制进行编码的。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance" xmlns:context="/schema/context" xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd /schema/context /schema/context/spring-context-3.0.xsd">
public class HelloGayImpl extends UnicastRemoteObject implements HelloGay { public HelloGayImpl()throws RemoteException { super(); } @Override public String sayHello(String name) { return "Hello, " + name; } @Override public int sum(int a, int b) { return a-b; } }

rmi

rmi

服务器端
import .MalformedURLException; import java.rmi.AlreadyBoundException; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry;
接口的实现
2.实现远程对 实现远程对 象(服务器端 程序) 程序)
import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class TestInterfaceRemoteImpl extends UnicastRemoteObject implements TestInterfactRemote { public TestInterfaceRemoteImpl() throws RemoteException { super(); } public int add(int a, int b) throws RemoteException { return a+b; }
} catch (MalformedURLException e) { System.out.println("错误的地址!"); e.printStackTrace(); } catch (RemoteException e) { System.out.println("创建远程对象出错!"); e.printStackTrace(); } catch (NotBoundException e) { System.out.println("未绑定的远程对象!"); e.printStackTrace(); }

rmi远程调用工作原理

rmi远程调用工作原理

rmi远程调用工作原理RMI(远程方法调用)是一种用于实现远程通信的Java API。

它允许一个Java对象在不同的Java虚拟机(JVM)之间进行通信和交互。

RMI的工作原理是通过序列化和反序列化来实现的。

在RMI中,有三个主要的角色:远程对象、客户端和服务器。

远程对象是实现了远程接口的Java对象,它可以在不同的JVM之间进行传输和调用。

客户端是发起远程调用的一方,而服务器是提供远程服务的一方。

RMI的工作流程如下:1. 客户端通过查找RMI注册表来获取远程对象的引用。

RMI注册表是一个存储远程对象引用的服务,客户端可以通过查找注册表来获取远程对象的地址。

2. 客户端通过远程对象的引用调用远程方法。

在调用远程方法之前,客户端需要序列化方法的参数,并将序列化后的数据发送给服务器。

3. 服务器接收到客户端发送的请求后,通过反序列化恢复方法的参数,并执行方法体中的代码。

服务器可以访问本地资源,如数据库或文件系统,并根据客户端的请求进行相应的处理。

4. 服务器执行完方法后,将方法的返回值序列化并发送给客户端。

5. 客户端接收到服务器发送的返回值后,通过反序列化恢复返回值,并继续执行后续的代码。

需要注意的是,在RMI中,远程对象和其所在的JVM之间通过网络进行通信。

为了实现远程通信,RMI使用了Java的序列化机制。

序列化是将一个Java对象转换成字节流的过程,而反序列化则是将字节流转换回Java对象的过程。

RMI的序列化机制可以确保远程对象在不同的JVM之间进行传输和重建。

当客户端调用远程方法时,RMI会自动对方法的参数进行序列化,并将序列化后的数据发送给服务器。

服务器在接收到数据后,会进行反序列化,并将参数恢复成原始的Java对象。

同样地,服务器执行完方法后,将返回值序列化并发送给客户端,客户端在接收到返回值后进行反序列化。

RMI的远程调用过程中,序列化和反序列化是必不可少的环节。

通过序列化,RMI可以将Java对象在网络中进行传输,使得远程调用得以实现。

rmi利用原理

rmi利用原理

rmi利用原理
RMI利用原理
RMI(Remote Method Invocation)是一种远程服务调用技术,
它可以让客户端的一个程序调用另一台服务端的 Java 程序,而不必关心跨网络的底层细节,也无需为客户端和服务器之间的数据传输提供特殊的处理。

RMI 可以在不同的计算机系统之间传递 Java 对象,而且不需要客户端和服务器之间的网络层协议。

它使用Java 平台独有的反射机制来实现远程方法调用,由于Java 平台的跨平台特性,客户端和服务器之间的通信可以跨越不同的操作系统和网络协议,使得 RMI 更
加强大。

RMI利用原理的核心是一个叫做 RMI registry 的元数据服务,它可以在服务器端动态生成一个名为 URL 的 Javabean,该Javabean 包含了服务器的 IP 地址和端口号,客户端可以通过该Javabean 来访问服务器端,调用服务器端的方法。

RMI registry 还可以用于服务器端对远程对象的调用,客户端
可以通过注册的远程对象来访问服务器端的方法,实现远程方法调用。

此外,RMI 还可以支持客户端和服务器端之间的消息传输,使得客户端和服务器端之间可以通过消息传输来进行数据传输。

总之,RMI 是一种非常强大的远程服务调用技术,它支持跨越不同的操作系统和网络协议的远程方法调用,可以支持客户端和服务器端之间的消息传输,可以为企业系统的架构提供强大的远程数据访问
能力。

RMI原理及实现

RMI原理及实现
象,它就象服务器上的对象的代理,向客户端提供能够被服务器调用的方法。然后,Stub 就会向服务器端的 Skeleton 发送方法调用,Skeleton 就会在服务器端执行接收到的方法。
Stub 和 Skeleton 之间通过远程调用层进行相互通讯,远程调用层遵循 TCP/IP 协议收发 数据。下面我们来大致了解一种称为为“绑定”的技术。
?远程客户端:这是一个帮助我们访问远程方法提供帮助的类,它也是最终用户。 我们将使用查找和调用远程方法的方法在该类中调用远程方法。
编程 我们将首先编写远程对象,并将代码保存为名字为 AddServer.Java 的文件: import Java.rmi.*; public interface AddServer extends Remote { public int AddNumbers(int firstnumber,int secondnumber) throws RemoteException; } 我们来看看上面的代码。首先,为了使用其内容,我们导入 rmi 包。然后,我们创
C:\jdk\bin\Javac workingdir\RmiClient.Java 在对我们的代码进行测试前,还必须首先启动 RMI Registry。RMI Registry 存储有 所有绑定的数据,没有它,RMI 就不能正常地运行! 启动 Rmi Registry 服务器: C:\jdk\bin\start rmiregistry 我们会注意到,这时会出现一个空白的 DOS 提示符窗口,这表明 Rmi Registry 服 务器在运行,注意不要关闭该窗口。然后,我们首先在一个 DOS 提示符窗口中运行 Rmi 服 务器,然后在另一个 DOS 提示符窗口中运行 Rmi 客户端。 启动 RMI 服务器:

java_RMI技术讲解

java_RMI技术讲解

RMI技术讲解1、什么是RMI?我们知道远程过程调用(Remote Procedure Call, RPC)可以用于一个进程调用另一个进程(很可能在另一个远程主机上)中的过程,从而提供了过程的分布能力。

Java 的RMI 则在RPC 的基础上向前又迈进了一步,即提供分布式对象间的通讯。

RMI(Remote Method Invocation)为远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。

这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。

2、RMI的用途?RMI的用途是为分布式Java应用程序之间的远程通信提供服务,提供分布式服务。

目前主要应用时封装在各个J2EE项目框架中,例如Spring,EJB(Spring和EJB均封装了RMI技术)在Spring中实现RMI(具体代码见最后一页)①在服务器端定义服务的接口,定义特定的类实现这些接口;②在服务器端使用org.springframework.remoting.rmi.RmiServiceExporter类来注册服务;③在客户端使用org.springframework.remoting.rmi.RmiProxyFactoryBean来实现远程服务的代理功能;④在客户端定义访问与服务器端服务接口相同的类3、RMI的局限?RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。

JRMP是专为Java的远程对象制定的协议,由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。

不能与用非Java语言书写的对象进行通信(意思是只支持客户端和服务器端都是Java程序的代码的远程调用)。

4、RMI的使用局限?由于客户机和服务器都是使用Java编写的,二者平台兼容性的要求仅仅是双方都运行在版本兼容的Java虚拟机上。

rmi原则的划分和分类

rmi原则的划分和分类

rmi原则的划分和分类
RMI原则划分和分类:
一、抽象性原则:将业务中的抽象概念和抽象服务从实现中分离,以便重用。

二、封装性原则:将数据和实现细节封装在对象内部,以便保护对象的完整性和安全性。

三、继承性原则:使用类型继承,以便继承具有相同属性和行为的一组类。

四、多态性原则:多态性指允许使用相同的接口来实现不同的行为,从而提高代码的可重用性。

五、可拓展性原则:在不破坏现有的系统的情况下,可以添加新的功能,以满足新的业务需求。

RMI资料

RMI资料

Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。

它使客户机上运行的程序可以调用远程服务器上的对象。

远程方法调用特性使Java编程人员能够在网络环境中分布操作。

RMI全部的宗旨就是尽可能简化远程接口对象的使用。

Java RMI极大地依赖于接口。

在需要创建一个远程对象的时候,程序员通过传递一个接口来隐藏底层的实现细节。

客户端得到的远程对象句柄正好与本地的根代码连接,由后者负责透过网络通信。

这样一来,程序员只需关心如何通过自己的接口句柄发送消息。

接口的两种常见实现方式是:最初使用JRMP(Java Remote Message Protocol,Java远程消息交换协议)实现;此外还可以用与CORBA兼容的方法实现。

RMI一般指的是编程接口,也有时候同时包括JRMP和API(应用程序编程接口),而RMI-IIOP则一般指RMI接口接管绝大部分的功能,以支持CORBA的实现。

最初的RMI API设计为通用地支持不同形式的接口实现。

后来,CORBA增加了传值(pass by value)功能,以实现RMI接口。

然而RMI-IIOP和JRMP实现的接口并不完全一致。

所使用Java包的名字是java.rmi。

RMI原理

RMI原理
class复制到客户端5编译并运行客户端的程序简介rmi是远程方法调用的简称象其名称暗示的那样它能够帮助我们查找并执行远程对象的方法
简介 RMI是远程方法调用的简称,象其名称暗示的那样,它能够帮助我们查找并执行远程对象 就象将一个class放在A机器上,然后在B机器中调用这个class的方法.
参见下图: JVM-1 Java对象 远程调用
操作步骤:
1、编译服务器端的程序 2、通过rmic.exe工具 生成需要用到的.class 3、运行服务器端的程序 4、将需要用的.class复制到客户端 5、编译并运行客户端的程序
们查找并执行远程对象的方法。通俗地说,远程调用
JVM-

RMI由浅入深

RMI由浅入深

RMI 由浅⼊深0x01、什么是RMIRMI(Remote Method Invocation)即Java 远程⽅法调⽤,RMI ⽤于构建分布式应⽤程序,RMI 实现了Java 程序之间跨JVM 的远程通信。

顾名思义,远程⽅法调⽤:客户端⽐如说是在⼿机,然后服务端是在电脑;同时都有java 环境,然后我要在⼿机端调⽤服务端那边的某个⽅法,这就是,远程⽅法调⽤;使⽤RMI 的时候,客户端对远程⽅法的调⽤就跟对同⼀个Java 虚拟机(也就是本地)上的⽅法调⽤是⼀样的。

⼀般调⽤和RMI 调⽤有⼀点不同,虽然对客户端来说看起来像是本地的,但是客户端的stub 会通过⽹络发出调⽤,所以会抛出异常;其中还是会涉及到Socket 和串流的问题,⼀开始是本地调⽤,然后就代理(stub )会转成远程,中间的信息是如何从Java 虚拟机发送到另外⼀台Java 虚拟机要看客户端和服务端的辅助设施对象所⽤的协议⽽定;使⽤RMI 的时候,需要选择协议:JRMP 或IIOP 协议;JRMP 是RMI 的原⽣的协议,也就是默认JRMP 协议。

⽽IIOP 是为了CORBA ⽽产⽣的~~~远程⽅法调⽤,具体怎么实现呢?远程服务器提供具体的类和⽅法,本地会通过某种⽅式获得远程类的⼀个代理,然后通过这个代理调⽤远程对象的⽅法,⽅法的参数是通过序列化与反序列化的⽅式传递的,所以,1. 只要服务端的对象提供了⼀个⽅法,这个⽅法接收的是⼀个Object 类型的参数2. 且远程服务器的classpath 中存在可利⽤pop 链,那么我们就可以通过在客户端调⽤这个⽅法,并传递⼀个精⼼构造的对象的⽅式来攻击rmi 服务。

某种⽅式获得远程对象的代理,那么具体是怎么的实现机制呢?RMI 模式中除了有Client 与Server,还借助了⼀个Registry(注册中⼼)。

其中Server 与Registry 可以在同⼀服务器上实现,也可以布置在不同服务器上,现在⼀个完整的RMI 流程可以⼤概描述为:Registry 先启动,并监听⼀个端⼝,⼀般为1099Server 向Registry 注册远程对象Client 从Registry 获得远程对象的代理(这个代理知道远程对象的在⽹络中的具体位置:ip 、端⼝、标识符),然后Client 通过这个代理调⽤远程⽅法,Server 也是有⼀个代理的,Server 端的代理会收到Client 端的调⽤的⽅法、参数等,然后代理执⾏对应⽅法,并将结果通过⽹络返回给Client 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
远程方法调用远程方法调用-RMI
ቤተ መጻሕፍቲ ባይዱ
一,RMI概述 概述
1,RMI介绍 , 介绍 RMI是Java的一组拥护开发分布式应用程序的 的一组拥护开发分布式应用程序的API.RMI使用 使用Java语 是 的一组拥护开发分布式应用程序的 . 使用 语 言接口定义了远程对象,它集合了Java序列化和 序列化和Java远程方法协议 言接口定义了远程对象,它集合了 序列化和 远程方法协议 (Java Remote Method Protocol).简单地说,这样使原先的程序在同 .简单地说, 一操作系统的方法调用,变成了不同操作系统之间程序的方法调用, 一操作系统的方法调用,变成了不同操作系统之间程序的方法调用,由 是分布式程序平台, 于J2EE是分布式程序平台,RMI机制实现程序组件在不同操作系统之间 是分布式程序平台 机制实现程序组件在不同操作系统之间 的通信.比如,一个EJB可以通过 可以通过RMI调用 调用Web上另一台机器上的 上另一台机器上的EJB 的通信.比如,一个 可以通过 调用 上另一台机器上的 远程方法. 远程方法. RMI(Remote Method Invocation,远程方法调用)是用 ( ,远程方法调用)是用Java实 实 现的,大大增强了Java开发分布式应用的能力.Java巨大的威力就体 开发分布式应用的能力. 现的,大大增强了 开发分布式应用的能力 巨大的威力就体 现在它强大的开发分布式网络应用的能力上, 现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百 就是开发百分之百 的网络分布式应用系统的核心解决方案之一. 纯Java的网络分布式应用系统的核心解决方案之一.其支持存储于不同 的网络分布式应用系统的核心解决方案之一 地址空间的程序级对象之间彼此进行通信, 地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远 程调用. 程调用.
一,RMI概述 概述
RMI是为仅在 是为仅在Java对Java的分布式计算中而开发的. 的分布式计算中而开发的. 是为仅在 对 的分布式计算中而开发的 远程调用的标准是为了Java和应用 和应用Java的自然 的自然Java签名 远程调用的标准是为了 和应用 的自然 签名 和调用而开发的,这使得RMI对Java的开发者相当透明 和调用而开发的,这使得 对 的开发者相当透明 而且易于实现.RMI用Java语言紧密集成从而同 而且易于实现. 用 语言紧密集成从而同CORBA 语言紧密集成从而同 相比能够提供非常好的容错能力及对异常的处理. 相比能够提供非常好的容错能力及对异常的处理.尽管 Java的RMI标准不像 标准不像CORBA那样语言独立,但Java本身 那样语言独立, 的 标准不像 那样语言独立 本身 是一个独立的平台,这就使RMI在跨平台的分布软件开发 是一个独立的平台,这就使 在跨平台的分布软件开发 中是一个很好的选择. 中是一个很好的选择. RMI是Java语言在分布式计算上的基本模型,很多 是 语言在分布式计算上的基本模型, 语言在分布式计算上的基本模型 Java的分布式系统,包括我们本章要涉及的 的分布式系统, 的分布式系统 包括我们本章要涉及的EJB,都是 , 建立在RMI的思想上的. 的思想上的. 建立在 的思想上的
二,RMI系统运行机制
stub和skeleton由rmic编译器生成.远程对象的 和 编译器生成. 由 编译器生成 远程对象的stub 担当远程对象在客户端本地的代理,向远程RMI服务器传达 担当远程对象在客户端本地的代理,向远程 服务器传达 对象请求,等待响应. 对象请求,等待响应 RMI客户在存根代理上调用对象方法,而该对象方法又 客户在存根代理上调用对象方法, 客户在存根代理上调用对象方法 把这个请求传达给RMI服务器.在RMI服务器端,骨架对象 服务器. 服务器端, 把这个请求传达给 服务器 服务器端 负责监听传入的RMI请求并把它们传递给远程服务器.不过 请求并把它们传递给远程服务器. 负责监听传入的 请求并把它们传递给远程服务器 骨架对象不提供RMI服务的实现,仅充当请求的接收者,并 服务的实现, 骨架对象不提供 服务的实现 仅充当请求的接收者, 进一步传递这些请求.请求被实现后,由骨架对象调用, 进一步传递这些请求.请求被实现后,由骨架对象调用, 并把结果回传给RMI客户的存根对象. 并把结果回传给 客户的存根对象. 客户的存根对象 存根对象和骨架对象通过TCP套接字进行通信. 套接字进行通信. 存根对象和骨架对象通过 套接字进行通信
一,RMI概述 概述
2,RMI的目的 , 的目的 RMI的根本目的就是给应用程序开发者提供一个调用 的根本目的就是给应用程序开发者提供一个调用 远程对象方法的抽象功能,而不必采用低级通信. 远程对象方法的抽象功能,而不必采用低级通信.这样用 java开发的分布式应用程序可以完全是面向对象的,可以 开发的分布式应用程序可以完全是面向对象的, 开发的分布式应用程序可以完全是面向对象的 使用面向对象的开发方法进行设计. 使用面向对象的开发方法进行设计. RMI目前使用 目前使用Java远程消息交换协议 远程消息交换协议JRMP(Java 目前使用 远程消息交换协议 ( Remote Messaging Protocol)进行通信.JRMP是专 )进行通信. 是专 的远程对象制定的协议. 为Java的远程对象制定的协议.因此,Java RMI具有 的远程对象制定的协议 因此, 具有 Java的"Write Once,Run Anywhere"的优点,是分布 的 , 的优点, 的优点 式应用系统的百分之百纯Java解决方案.用Java RMI开 解决方案. 式应用系统的百分之百纯 解决方案 开 发的应用系统可以部署在任何支持JRE(Java Run 发的应用系统可以部署在任何支持 ( Environment Java,运行环境)的平台上. ,运行环境)的平台上.
二,RMI系统运行机制
1)注册服务(rmiregistry) )注册服务( ) 为了让客户找到远程对象, 为了让客户找到远程对象,RMI服务器必须注册查找服 服务器必须注册查找服 应用程序作为独立进程运行, 务.Rmiregistry应用程序作为独立进程运行,允许程序注 应用程序作为独立进程运行 册RMI服务或取得命名服务的引用.一旦服务器注册,就等 服务或取得命名服务的引用.一旦服务器注册, 服务或取得命名服务的引用 待来自用户的请求. 待来自用户的请求.每个服务注册都有一个名字及其关联 由字符串表示),以允许客户选择合适的服务. ),以允许客户选择合适的服务 (由字符串表示),以允许客户选择合适的服务. 2)远程交互(stub&skeleton) )远程交互( ) 客户通过RMI注册查找得到对远程对象的引用,一旦得 注册查找得到对远程对象的引用, 客户通过 注册查找得到对远程对象的引用 到对象引用,客户即可与远程对象交互.即通过stub(存 到对象引用,客户即可与远程对象交互.即通过 ( 根)和skeleton(骨架)这二个组件实现. (骨架)这二个组件实现.
三,Java RMI的接口和类
2,java.rmi包 , 包 1)Remote远程接口 ) 远程接口 该接口没有定义任何用于实现类的方法, 该接口没有定义任何用于实现类的方法,它只是被用作 标识远程服务的一种手段.每个RMI服务接口都必须继承 标识远程服务的一种手段.每个 服务接口都必须继承 Remote接口.作为接口,不能被实例化. 接口. 接口 作为接口,不能被实例化. 当创建继承java.rmi.Remote接口的服务时,所有方法 接口的服务时, 当创建继承 接口的服务时 必须声明throws子句来抛出异常,这是 子句来抛出异常, 工具要求. 必须声明 子句来抛出异常 这是rmic工具要求.没 工具要求 有遵循这个条件将导致在生成stub和skeleton时出错. 时出错. 有遵循这个条件将导致在生成 和 时出错 2)Naming类 ) 类 该类提供在对象注册表中存储和获得远程对远程对象引 该类提供在对象注册表中存储和获得远程对远程对象引 用的方法.每个方法都带有一个参数, 用的方法.每个方法都带有一个参数,该参数是表示到某个 注册项的URL字符串.其格式如下: 字符串. 注册项的 字符串 其格式如下:
二,RMI系统运行机制
RMI的分层结构不仅在概念上显得很清晰和合理,而且也为开发RMI应 的分层结构不仅在概念上显得很清晰和合理,而且也为开发 的分层结构不仅在概念上显得很清晰和合理 应 用程序提供了极大的方便, 用程序提供了极大的方便,RMI的分层结构可以让开发人员在高层进行开 的分层结构可以让开发人员在高层进行开 发而不必要去理会底层的细节,这样使开发RMI应用程序和开发普通的 发而不必要去理会底层的细节,这样使开发 应用程序和开发普通的 Java应用程序几乎没有什么区别. 应用程序几乎没有什么区别. 应用程序几乎没有什么区别
数据流
RMI应用程序流程图 应用程序流程图
三,Java RMI的接口和类
1,RMI包 , 包 Java API中,处理 的包有5个 中 处理RMI的包有 个: 的包有 1)java.rmi:定义 定义RMI中所使用的远程接口和类,以及可能 中所使用的远程接口和类, ) 定义 中所使用的远程接口和类 在运行时抛出的异常. 在运行时抛出的异常. 2)java.rmi.activation:支持远程服务的激活.激活允许按 支持远程服务的激活. ) 支持远程服务的激活 需启动服务,而不是持续的运行服务从而消耗系统资源. 需启动服务,而不是持续的运行服务从而消耗系统资源. 3)java.rmi.dgc:提供支持分布式垃圾回收的接口和类. 提供支持分布式垃圾回收的接口和类. ) 提供支持分布式垃圾回收的接口和类 4)java.rmi.registry:提供表示 提供表示RMI注册处接口以及定位已有 ) 提供表示 注册处接口以及定位已有 注册项或加载新注册项的类 定义与RMI服务器相关的接口和类,以 服务器相关的接口和类, 5)java.rmi.server:定义与 ) 定义与 服务器相关的接口和类 及在运行时可能抛出的异常. 及在运行时可能抛出的异常. 其中最常用的是: 其中最常用的是: java.rmi和java.rmi.server 和
相关文档
最新文档