RMI,远程方法调用(Remote Method Invocation)是Enterprise
JavaBeans的支柱,是建立分布式Java应用程序的方便途径。RMI是非常容易使用的,但是它非常的强大。
RMI的基础是接口,RMI构架基于一个重要的原理:定义接口和定义接口的具体实现是分开的。
远程方法调用
(Remote Method Invocation
,RMI
)是用Java在JDK
1.1
中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力
上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地
应用于分布式对象
系统。而Java RMI 则支持存储于不同地址空间的程序
级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
RMI目前使用Java远程消息
交
换协议JRMP(Java Remote Messaging
Protocol)进行通信。JRMP是专为Java的远程对象制定的协议。因此,Java RMI具有Java的"Write Once,Run
Anywhere"的优点,是分布式应用系统的百分之百纯Java解决方案。用Java RMI开发的应用系统可以部署在任何支持JRE
(Java Run Environment Java,运行环境)的平台上。但由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。不能与用非Java语言书写的对象进行通信。
Java Remote Method Invocation ( RMI -- Java远程方法调用)允许您使用Java编写分布式对象。本文将介绍RMI的优点以及如何将其连接到现有的和原有的系统中,以及与用Java 编写的组件
的连接。
RMI为采用Java对象的分布式计算提供了简单而直接的途径。这些对象可以是新的Java对象,也可以是围绕现有API
的简单的Java包装程序。Java体现了“编写一次就能在任何地方运行的模式
。而RMI可将Java模式进行扩展,使之可在任何地方运行”。
因为RMI是以Java为核心的,所以,它将Java的安全性和可移植性等强大功能带给了分布式计算。您可将代理和梢?务逻辑等属性移动到网络中最合适的地方。如果您要扩展Java在系统中的使用,RMI将使您充分利用其强大功能。
RMI可利用标准Java本机方法接口JNI
与现有的和原有的系统相连接。RMI还可利用标准JDBC
包与现有的关系数据库
连接。RMI/JNI和RMI/JDBC相结合,可帮助您利用RMI与目前使用非Java语言的现有服务器进行通信,而且在您需要时可扩展Java在这些服务器上的使用。RMI可帮助您在扩展使用时充分利用Java的强大功能。
一、RMI(远程方法调用)的组成
一个正常工作的RMI系统由下面几个部分组成:
·远程服务的接口定义
·远程服务接口的具体实现
·桩(Stub)和框架
(Skeleton)文件
·一个运行远程服务的服务器
·一个RMI命名服务,它允许客户端
去发现这个远程服务
·类
文件的提供者(一个HTTP或者FTP服务器)
·一个需要这个远程服务的客户端程序
二、RMI(远程方法调用)的工作原理
RMI系统结构,在客户端和服务器端都有几层结构。
rmi结构图
方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference
Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传
输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。 占位程序扮演着远程服务器对象的代理的角色,使该对象可被客户激活。
远程引用层处理语义、管理单一或多重对象的通信,决定调用是应发往一个服务器还是多个。传输层管理实际的连接,并且追追踪可以接受方法调用的远程对象。服
务器端的骨干网完成对服务器对象实际的方法调用,并获取返回值。返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上经传输层和远程调用层返
回。最后,占位程序获得返回值。
要完成以上步骤需要有以下几个步骤:
1、生成一个远程接口
2、实现远程对象(服务器端程序)
3、生成占位程序和骨干网(服务器端程序)
4、编写服务器程序
5、编写客户程序
6、注册远程对象
7、启动远程对象
具体实现如下:
1、生成一个远程接口
package c15.ptime;
import java.rmi.*;
public interface PerfectTimeI extends Remote {
long getPerfectTime() throws RemoteException;
}
2、实现远程对象(服务器端程序)
package c15.ptime;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.net.*;
public class
PerfectTime
extends UnicastRemoteObject
implements PerfectTimeI {
public long getPerfectTime()
throws RemoteException {
return System.currentTimeMillis();
}
public PerfectTime() throws RemoteException {
super();
}
public static void main(String[] args) {
System.setSecurityManager(
new RMISecurityManager());
try {
PerfectTime pt = new PerfectTime();
Naming.rebind(
"//zhouty:2005/PerfectTime" , pt);
System.out.println("Ready to do time");
} catch(Exception e) {
e.printStackTrace();
}
}
}
4、编译远程对象(服务器端程序)
javac -classpath . -d . PerfectTime.java
5、生成根和干(占位程序和骨干程序)
rmic -classpath . -d . c15.ptime.PerfectTime
6、注册远程对象
start rmiregistry 2005
7、启动服务器端程序
java -Djava.rmi.server.codebase=file:///d:/TestRMI/ c15.ptime.Per
fectTime
8、编写客户端程序
package c15.ptime;
import java.rmi.*;
import java.rmi.registry.*;
public class DisplayPerfectTime {
public static void main(String[] args) {
System.setSecurityManager(
new RMISecurityManager());
try {
PerfectTimeI t =
(PerfectTimeI)Naming.lookup(
"192.168.0.171:2005/PerfectTime");
for(int i = 0 ; i < 10; i++)
System.out.println("Perfect time =" +
t.getPerfectTime());
} catch(Exception e) {
e.printStackTrace();
}
}
}
9、编译客端程序
javac -classpath . -d . DisplayPerfectTime.java
10、修改JVM
的配置文件 (客户机和服务器的都需要经过修改)
%JRE_HOME%policytool.exe
11、启动客户程序
java -classpath . c15.ptime.DisplayPerfectTime
12、返回结果
Perfect time =967274884390
Perfect time =967274884450
Perfect time =967274884450
Perfect time =967274884450
Perfect time =967274884500
Perfect time =967274884500
Perfect time =967274884560
Perfect time =967274884610
Perfect time =967274884610
Perfect time =967274884610
三、RMI(远程方法调用)的优点
从最基本的角度看,RMI是Java的远程过程调用
(RPC)机制。与传统的RPC系统相比,RMI具有若干优点,因为它是Java面向对象方法
的一部分。传统的RPC系统采用中性语言,所以是最普通的系统--它们不能提供所有可能的目标平台所具有的功能。
RMI以Java为核心,可与采用本机方法与现有系统相连接。这就是说,RMI可采用自然、直接和功能全面的方式为您提供分布式计算技术,而这种技术可帮助您以不断递增和无缝的方式为整个系统添加Java功能。
面向对象:RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,您可以将类似Java哈希表这样的复杂类型作为一个参
数进行传递。而在目前的RPC系统中,您只能依靠客户机将此类对象分解成基本数据类型,然后传递这些数据类型,最后在服务器端重新创建哈希表。RMI则不
需额外的客户程序代码(将对象分解成基本数据类型),直接跨网传递对象。
可移动属性:RMI可将属性(类实现程序)从客户机移动到服务器,
或者从服务器移到客户机。例如,您可以定义一个检查雇员开支报告的接口,以便察看雇员是否遵守了公司目前实行的政策。在开支报告创建后,客户机就会从服务
器端获得实现该接口的对象。假如政策发生变化,服务器端就会开始返回使用了新政策的该接口的另一个实现程序。您不必在用户系统上安装任何新的软件就能在客
户端检查限制条件--从而向用户提供烁?快的反馈,并降低服务器的工作量。这样就能具备最大的灵活性,因为政策改变时只需要您编写一个新的Java类,并
将其在服务器主机上安装一次即可。
设计方式:对象传递功能使您可以在分布式计算中充分利用面向对象技术的强大功能,如二层和三层结构系统。
假如您能够传递属性,那么您就可以在您的解决方案中使用面向对象的设计方式。所有面向对象的设计方式无不依靠不同的属性来发挥功能,假如不能传递完整的对
象--包括实现和类型--就会失去设计方式上所提供的优点。
安全:RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全。RMI使用专门为保护系统免遭恶意小应用程序侵害而设计的安全治理程序,可保护您的系统和网络免遭潜在的恶意下载程序的破坏。在情况严重时,服务器可拒绝下载任何执行程序。
便于编写和使用:RMI使得Java远程服务程序和访问这些服务程序的Java客户程序的编写工作变得轻松、简单。远程接口实际上就是Java接口。服
务程序大约用三行指令公布本身是服务程序,其它方面则与任何其它Java对象类似。这种简单方法便于快速编写完整的分布式对象系统的服务程序,并快速地制
做软件的原型和早期版本,以便于进行测试和评估。因为RMI程序编写简单,所以维护也简单。
可连接现有/原有的系统:RMI可通过Java
的本机方法接口JNI与现有系统进行进行交互。利用RMI和JNI,您就能用Java语言编写客户端程序,还能使用现有的服务器端程序。在使用
RMI/JNI与现有服务器连接时,您可以有选择地用Java重新编写服务程序的任何部分,并使新的程序充分发挥Java的功能。类似地,RMI可利用
JDBC、在不修改使用数据库的现有非Java源代码的前提下与现有关系数据库进行交互。
编写一次,到处运行:RMI是Java“编写一
次,到处运行
”方法的一部分。任何基于RMI的系统均可100%地移植到任何Java虚拟机上,RMI/JDBC系统也不例外。假如使用RMI/JNI与现有系统进行
交互工作,则采用JNI编写的代码可与任何Java虚拟机进行编译、运行。
分布式垃圾收集:RMI采用其分布式垃圾收集功能收集不再被网络中任何客户程序所引用的远程服务对象。与Java 虚拟机内部的垃圾收集类似,分布式垃圾收集功能答应用户根据自己的需要定义服务器对象,并且明确这些对象在不再被客户机引用时会被删除。
并行计算:RMI采用多线程处理方法,可使您的服务器利用这些Java线程更好地并行处理客户端的请求。Java分布式计算解决方案:RMI从JDK
1.1开始就是Java平台的核心部分,因此,它存在于任何一台1.1 Java虚拟机中。所有RMI系统均采用相同的公开协议,所以,所有Java
系统均可直接相互对话,而不必事先对协议进行转换。
分享到:
相关推荐
3. **EJB示例**:可能是简单的会话bean或实体bean,展示了如何在EJB中使用RMI-IIOP。 4. **配置文件**:可能包含ORB的配置信息,如ORB供应商、IIOP端口等。 学习这个实例,你需要理解以下知识点: - **RMI概念**:...
在Java EJB中,RMI-IIOP被用来实现EJB容器之间的通信,尤其是当涉及到远程接口时。EJB是一种服务器端组件模型,用于构建企业级应用,它可以提供事务管理、安全性、持久化等服务。RMI-IIOP使得客户端能够通过网络调用...
这个压缩包“Java RMI-IIOP 相关源代码.rar”包含了相关的源代码示例,适合Java EJB(Enterprise JavaBeans)初学者进行学习和实践。 首先,Java RMI允许Java对象在不同的Java虚拟机之间进行远程调用,就像是本地...
4. **EJB与RMI-IIOP的关系**:比较EJB中的RMI-IIOP使用与普通Java RMI的区别,理解EJB如何提供更高级的服务和管理功能。 5. **测试与调试**:通过运行批处理命令,观察服务的启动和客户端调用过程,学习如何调试...
EJB(Enterprise JavaBeans)是Java EE(Java Platform, Enterprise Edition)的一部分,它提供了一种框架来创建和部署企业级的应用,其中就包括了RMI的使用。 在RMI中,远程方法调用的过程可以分为以下几个关键点...
- EJB使用Java RMI(Remote Method Invocation)作为远程通信的基础技术,允许Java对象在分布式环境中相互调用方法。 4. 组件化特点: - CORBA提供了面向对象的服务,强调了对象接口定义语言(IDL)的使用,以...
在IT行业中,远程方法调用(Remote Method Invocation,简称RMI)是一种强大的...同时,RMI也可以与Java的其他特性,如EJB(Enterprise JavaBeans)、JMS(Java Message Service)等相结合,构建更复杂的分布式系统。
【ejb-rmi-test】项目概述 ejb-rmi-test是一个基于Java技术的测试项目,主要涉及企业级Java Bean(EJB)和远程方法调用(RMI)两大核心技术。EJB是Java平台企业版(Java EE)的核心组成部分,用于构建可部署在...
此外,为了提高性能,避免分布式环境(如RMI)带来的开销,可以选择在同一应用服务器(如JBoss 6)上同时部署EJB3和Struts2。这样,业务逻辑和Web层可以直接通信,无需通过网络调用,从而提高系统效率。 整合Struts...
EJB的实现基于RMI技术。RPC允许在不同的计算机之间调用方法,就像它们在同一台机器上运行一样。RMI是RPC的一种Java实现,它提供了更高级别的接口,使得Java对象可以在网络环境中透明地进行远程调用。RMI客户机通过...
- 定义JNDI名称:在EJB部署描述符(ejb-jar.xml或web.xml)中,开发者会为每个EJB组件指定一个JNDI名称。 - 查找EJB:在客户端代码中,使用`InitialContext`类的`lookup`方法,传入JNDI名称来查找EJB引用。 - ...
一、RMI基础概念 1. 远程接口(Remote Interface):定义了远程对象需要暴露的方法,这些方法将在远程服务器上执行。 2. 远程实现(Remote Implementation):实现了远程接口的类,是实际执行远程方法的对象。 3. ...
3. **选择部署描述符**:可以选择使用标准的`ejb-jar.xml`或特定服务器的配置文件。 4. **配置JNDI**:设置命名服务,使得客户端能够查找并访问EJB组件。 5. **测试与调试**:确保应用按预期工作。 #### 五、JPA在...
8. **安全性**:EJB可以通过角色为基础的访问控制(RBAC)来限制不同用户对组件的访问权限。 9. **并发控制**:对于多线程环境,EJB提供了并发策略来处理多个请求。 10. **JPA和JDO**:实体bean通常与Java ...
环境:Window Prefessional XP, JDK 1.60, ant 1.7.1 使用步骤: 1. 在下载解压后目录中输入命令:ant build ...不过,成功一次之后,对于理解EJB应用的生命是非常有帮助的,因为RMI是EJB的核心部分!
此外,EJB还提供了分布式服务,使得一个Bean可以在网络中的不同服务器上运行,并通过RMI(远程方法调用)进行通信。这有助于构建分布式应用程序,提高系统的可扩展性和可用性。 Java的软件/插件标签可能意味着...