原文地址:
http://download.oracle.com/javase/1.5.0/docs/guide/rmi/spec/rmi-objmodel.html
Chapter 2 :Distributed Object Model(分布式对象模型)
2.1 分布式对象应用程序
RMI应用程序一般由服务端和客户端组成。一个典型的RMI服务应用程序会创建一些远程对象,使这些远程对象的引用可以被访问,然后等着客户端去调用这些远程对象上的方法。一个典型的RMI客户端会获取一个指向一个或者多个远程对象的引用,然后调用方法。RMI提供一种机制,以实现服务端和客户端的通信和信息的来回传递。这样的应用程序有时候就被称作分布式应用程序。
分布式对象应用程序需要具备如下功能:
应用程序使用两种机制中的一种趋获取远程对象的引用。应用程序可以使用RMI简单命名服务(rmiregistry)注册它的远程对象,或者像正常的操作一样传递和返回远程对象的应用。
RMI会处理具体远程对象之间通信的细节;对于程序员来说,远程对象的通信就跟标准的方法调用一样。
因为RMI允许调用者传递对象到远程对象中,所以RMI提供了必要的机制来加载对象的代码
下面的图描述了一个RMI分布式程序使用注册去获取远程对象的引用。服务端调用注册模块用名称标识关联远程对象。客户端在服务端的注册器中通过名字标识查找对应的远程对象,然后调用远程对象上的方法。下面的图还显示了RMI系统通过已有的web服务来加载类的字节流代码。RMI可以基于任何java支持的URL协议来加载类的字节码。
2.2 术语定义
在java的分布式对象模型中,remote object 就是一种对象,它的方法能被来自不同的JVM,甚至是不同主机的程序所调用。这种对象必须实现一个或者多个remote接口,remote接口声明了远程对象应该具有的方法。
Remote mothod invocation(RMI) 指的就是调用远程对象上remote接口方法的一种行为。最重要的是,远程对象上的方法调用跟对本地对象进行方法调用有着一样的语法格式。
2.3 分布式和非分布式模型的对比
分布式和非分布式的模型的相同点:
- 远程对象和本地对象的引用在任何方法调用中都能当做方法的参数被传递,或者作为方法执行的结果。
- 远程对象类型能被转换成任何一种它实现的远程接口。
- 内建的instanceof方法都能被用来测试远程对象支持的远程接口。
分布式和非分布式的模型的不同点:
- 远程对象的客户端从来只跟远程对象实现的接口打交道,而不是具体的远程对象类。
- 远程方法调用的时候,参数和返回值是非远程对象(即本地对象),那么传递参数,或者返回方法结果的时候,都是通过复制对象而不是传递引用来实现的。因为传递对象应用只能在单个java虚拟机中起作用。
- 远程对象总是通过引用来传递,而不是复制远程对象的实现。
- 因为远程方法调用的出错模式比本地方法调用来的复杂,所以客户端在进行远程方法调用的时候必须处理更多额外的异常。
2.4 RMI接口和类概述
java.rmi 包中的接口和类实现RMI功能,下面的图展示了这些接口和类的继承关系:
2.4.1 java.rmi.Remote 接口
在RMI中, remote接口描述了被远程JVM调用的方法集. remote接口必须满足以下的要求:
- 一个remote接口必须直接或者间接的继承接口java.rmi.Remote。
- 每个remote接口的声明或者其父接口的声明必须满足远程方法声明的要求:
1.一个远程方法的声明必须包括 java.rmi.RemoteException异常(或者它的父类如java.io.IOException 或 者java.lang.Exception) 在它的抛出源中,此外还要抛出应用程序相关的异常。
2.在远程方法的声明中,在方法的参数中或者返回值中直接或者间接(嵌套在非远程对象中)包含远程对象,那么 这个对象必须声明为remote接口,而不是接口的实现类。
接口 java.rmi.Remote 只是一个标记型的接口,它没有定义任何的方法:
public interface Remote {}
一个远程接口必须至少继承java.rmi.Remote接口(直接或者间接)。然而符合下面条件的情况下,一个远程接口也可以 不继承远程接口:
- 远程接口也可以继承只要满足远程方法描述必备的条件的接口。
举个例子,下面的BankAccount为访问银行账号定义的一个接口。它包含远程方法:存钱(deposit to the account),查询余额(to get the account balance),取钱(to withdraw from the account):
public interface BankAccount extends java.rmi.Remote {
public void deposit(float amount)
throws java.rmi.RemoteException;
public void withdraw(float amount)
throws OverdrawnException, java.rmi.RemoteException;
public float getBalance()
throws java.rmi.RemoteException;
}
下面的例子展示了一个正确的远程接口Beta,它继承了一个非远程接口 Alpha,Alpha它有远程方法,和接口java.rmi.Remotei。Remote:
public interface Alpha {
public final String okay = "constants are okay too";
public Object foo(Object obj)
throws java.rmi.RemoteException;
public void bar() throws java.io.IOException;
public int baz() throws java.lang.Exception;
}
public interface Beta extends Alpha, java.rmi.Remote {
public void ping() throws java.rmi.RemoteException;
}
2.4.2 RemoteException类
java.rmi.RemoteException是RMI远程方法调用中抛出异常类的父类。为了保证使用RMI的应用程序的健壮性,远程接口中每个远程方法必须在它的抛出源中指定
java.rmi.RemoteException(或者是它的父类 java.io.IOException
or java.lang.Exception
)。
远程方法调用失败后,java.rmi.RemoteException将被抛出。远程方法调用失败的原因包括:
- 通信失败(远程服务不可达,或者拒绝连接,或者连接已经被服务关闭,等等)
- 在参数或者返回值的编列或者反编列失败
- 协议错误
RemoteException是被检查异常(必须被远程方法调用者处理,在编译的时候被检查),而不是运行时异常。
2.4.3 RemoteObject类和它的子类
java.rmi.server.RemoteObject和它的子类java.rmi.server.RemoteServer和java.rmi.server.UnicastRemoteObject
和java.rmi.activation.Activatable 提供了RMI服务的功能。
-
java.rmi.server.RemoteObject提供了
java.lang.Object类
hashCode
, equals
, 和toString方法的实现,以支持远程对象的功能。
-
UnicastRemoteObject和
Activatable提供了创建远程对象和导出远程对象的方法。这些子类还定义了远程对象引用的语意,例如服务是简单远程对象还是activatable remote object。
java.rmi.server.UnicastRemoteObject定义了一个单一的远程对象,该对象只在服务进程活动的时候可用。
-
类
java.rmi.activation.Activatable是一个抽象类,它定义了一个
activatable远程对象,该对象在方法被调用的时候启动执行并且在必要的时候关闭自身。
下一章节 RMI 系统 概述
- 大小: 9 KB
- 大小: 9.3 KB
分享到:
相关推荐
- CORBA(Common Object Request Broker Architecture):一种标准的分布式对象模型,允许不同操作系统和编程语言的对象进行交互。 - RMI(Remote Method Invocation):Java中的远程方法调用,允许Java对象在不同...
Java Remote Method Invocation (RMI) 是Java平台提供的一种强大的分布式计算技术,允许在不同网络节点上的Java对象之间进行透明的远程方法调用。基于RMI的分布式计算模型,可以将复杂的计算任务分解到多台计算机上...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台中用于构建分布式对象系统的关键技术。它允许Java应用程序在不同Java虚拟机(JVM)之间进行远程方法调用,这些虚拟机可能位于同一台计算机或网络上的...
本文将详细介绍Java RMI(Remote Method Invocation)、RPC(Remote Procedure Call)、JMS(Java Messaging Service)、CORBA(Common Object Request Broker Architecture)以及DCOM(Distributed Component ...
Java Remote Method Invocation(RMI)是Java平台提供的一种强大的分布式计算技术,它允许在不同的Java虚拟机(JVM)之间进行远程方法调用,从而构建分布式应用。通过RMI,开发者可以像调用本地对象的方法一样调用...
2. Java 分布式对象编程技术:RMI 是 Enterprise JavaBeans 的支柱,是建立分布式 Java 应用程序的方便途径。 RMI 应用程序分类 根据 RMI 应用程序各部分职责,可以对应用程序进行分类: 1. 服务器程序:服务器...
3. **软构件技术**:如CORBA(Common Object Request Broker Architecture)、IIOP(Internet Inter-ORB Protocol)、Java RMI(Remote Method Invocation)和COM/DCOM(Component Object Model/Distributed ...
此外,RMI 和 RMI-IIOP 还是 Java 2 Platform, Enterprise Edition (J2EE) 和 Enterprise JavaBeans (EJB) 技术的基础。 #### 三、RMI 的工作原理 RMI 的核心概念之一是分布式对象。分布式对象是指能够在不同 JVM ...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种用于构建分布式应用程序的技术。它允许Java对象在不同的 JVM(Java虚拟机)之间进行交互,仿佛它们是在同一个内存空间内一样。这个实例将带...
Chapter 2: The Java Programming Environment 15 Installing the Java Development Kit 16 Choosing a Development Environment 21 Using the Command-Line Tools 22 Using an Integrated Development ...
Java RMI(Remote Method Invocation)是Java平台中用于构建分布式应用程序的一种关键技术。Durham大学的这个教程详细介绍了如何在Java环境中有效地使用RMI,使得不同Java虚拟机(JVM)上的对象可以相互调用方法,...
Java/RMI是Sun Microsystems(现为Oracle)为Java平台提供的分布式对象模型。RMI允许Java对象在不同JVM(Java Virtual Machine)之间调用方法,提供了简单、高效的远程方法调用机制。Java接口定义语言(Java IDL)...
在这个名为"java-RMI-math-operator-server-client.zip_Math Class"的项目中,我们可以看到一个简单的Java RMI实现,用于执行基本的数学运算。 该项目的核心在于实现一个远程接口,该接口定义了可以在服务器上执行...
Java Remote Method Invocation(RMI)是Java平台提供的一种用于在分布式环境中进行对象间通信的技术。RMI服务器允许一个Java对象在远程机器上执行方法,使得客户端可以像调用本地对象一样调用远程对象,极大地简化...
Java RMI-IIOP(Remote Method Invocation - Internet Inter-ORB Protocol)是Java平台中用于分布式计算的一种技术,它结合了Java RMI和CORBA(Common Object Request Broker Architecture)的IIOP协议,使得Java...
在Java RMI-IIOP中,ORBS(Object Request Brokers)扮演了关键角色,它们负责对象之间的通信和互操作性。 首先,我们来了解下Java RMI。RMI允许一个Java对象调用远程机器上的另一个Java对象的方法,实现对象间的跨...
Java Remote Method Invocation(RMI)是一种分布式对象技术,允许使用 Java 编写分布式对象,不同的 Java 虚拟机(JVM)之间进行对象间的通讯。这使得应用程序(Application)可以远程调用方法,共享各个系统的资源...
- RMI(Remote Method Invocation):Java原生的RPC实现,用于Java对象间的跨网络调用。 - gRPC:基于HTTP/2的高性能RPC框架,支持ProtoBuf协议。 - Thrift:Facebook开源的跨语言RPC框架。 3. **消息中间件**:...
选举Java-Rmi-Arthurgbranco Trabalho deeleiçãoutilizando Java rmi 演员:亚瑟·格拉米塞利·布兰科(Arthur Gramiscelli Branco) 科莫(Como)地狱: 更改或更改PROJECT_PATH的配置文件配置文件,然后选择...
- RMI(Remote Method Invocation):Java的远程方法调用允许对象在不同的JVM之间进行交互。 - JMS(Java Message Service):提供异步消息传递,用于在分布式组件间解耦通信。 - EJB(Enterprise JavaBeans):...