请输入您要查询的百科知识:

 

词条 JavaRMI
释义

定义

RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.2中实现的,它大大增强了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客户使用java.rmi.Naming.lookup()方法,在指定的远程主机上查找RMI服务对象,若找到就把它转换成本地接口RMIOperate类型。它与CORBA不同之处在于RMI客户机必须知道提供RMI服务主机的URL,这个URL可以通过rmi://host/path或rmi://host:port/path来指定,如果省略端口号,就默认使用1099。

Java.rmi.Naming.lookup()方法可能产生三个异常:Java.rmi.RemoteException、Java.rmi.NotBoundException、 MalformedURLException,异常都需要捕获。

HelloClient.java

/*

* @author javamxj (CSDN Blog) 创建日期 2004-12-27

*/

import java.rmi.*;

public class HelloClient {

public static void main(String[] args) {

// 在服务器端设置安全机制

/*

if (System.getSecurityManager() == null) {

System.setSecurityManager(new RMISecurityManager());

}

*/

/* 默认为本地主机和默认端口 */

String host = "localhost:1099";

/* 带输入参数时,将host设置为指定主机 */

if (args.length > 0)

host = args[0];

try {

/* 根据指定的URL定位远程实现对象 */

/* “h”是一个标识符,我们将用它指向实现“Hello”接口的远程对象 */

Hello h = (Hello) Naming.lookup("rmi://" + host + "/HelloService");

System.out.println("实现“Hello”接口的远程对象: " + h);

System.out.println("我在客户端,开始调用RMI服务器端的'sayHello'方法");

System.out.println("欢迎, " + h.sayHello("javamxj blog"));

} catch (Exception ex) {

System.out.println("错误 " + ex);

}

}

编译代码与运行系统

在MS-DOS环境下,创建一个D:\\RMISample目录,把上面4个文件复制到这个目录下,然后在此目录下新建两个文件夹:client和server(把它们分别看作是客户端与服务端)。

(1).编译所有的源代码

D:\\RMISample> javac ja(2).生成客户端存根和服务器框架

D:\\RMISample> rmic HelloImpl

这将生成HelloImpl_Stub.class和HelloImpl_Skel.class。

( 注:如果需要查看这两个类的源代码,可以使用“ rmic -keep HelloImpl”语句)

(3).把Hello.class、HelloClient.class、HelloImpl_Stub.class复制到client目录;

把Hello.class、HelloServer.class、HelloImpl_Skel.class、HelloImpl_Stub.class 复制到server目录。

(4).启动RMI注册

D:\\RMISample\\server>rmiregistry

(注: 我是在命令控制台下运行这个系统的,必须开启三个控制台窗口,一个运行RMIRegistry,一个运行服务器,还有一个运行客户端。)

(5).运行和调用

在服务器上执行HelloServer

D:\\RMISample\\server>java HelloServer

在本地客户机上运行HelloClient

D:\\RMISample\\client>java HelloClient

在远程客户机上运行HelloClient(须指明RMI服务器主机名或IP地址)

java HelloClient 222.222.34.34

运行rmiregistry和server后的结果:

再运行Client后的结果:

还有一点要注意,在上面的例子中我注释了安全管理的代码,如果把注释去掉,那么需要建立一个安全策略文件,比如其文件名为 policy.txt,内容如下:

grant {

permission java.security.AllPermission "", "";

};

这是一条简单的安全策略,它允许任何人做任何事,对于你的更加关键性的应用,你必须指定更加详细安全策略。把这个文件复制到Client和Server目录,然后如下运行:

D:\\RMISample\\server>java -Djava.security.policy=policy.txt HelloServer

D:\\RMISample\\client>java -Djava.security.policy=policy.txt HelloClient

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/12/24 0:41:17