JAVA基础:在Java中实现远程方法调用

文章作者 100test 发表时间 2007:03:14 17:01:21
来源 100Test.Com百考试题网


一、Java中的远程方法调用

远程方法调用(Remote Method Invocation, RMI)是Java1.1引入的分布式对象软件包,它的出现简化了在多台机器上的Java应用之间的通信。相比CORBA,RMI功能较弱且只能用于Java系统。

二、实现一个简单的RMI

要使用RMI,必须构造四个主要的类:远程对象的本地接口、RMI客户、远程对象实现和RMI服务器。RMI服务器生成远程对象实现的一个实例,并用一个特殊的URL注册它,RMI客户在远程服务器上查找对象,若找到就把它转换成本地接口类型,然后像一个本地对象一样使用它。下面是一个简单的RMI例子,远程对象只返回一个消息字符串。要使这个例子更有价值,我们需要做的就是完善远程对象实现类。

1.远程对象的本地接口类(Rem.java)

该类仅仅是一个接口,而不是实现,RMI客户机可以直接使用它,RMI服务器必须通过一个远程对象来实现它,并用某个URL注册它的一个实例。

import java.rmi.*.
public interface Rem extends Remote { public String getMessage() throws RemoteException.}


本地接口(Rem)必须是公共的,否则客户机在加载一个实现该接口的远程对象时就会出错。此外,它还必须从java.rmi.Remote继承而来,接口中的每一个方法都必须抛出远程异常java.rmi.RemoteException。

2.RMI客户类(RemClient.java)

RMI客户使用Naming.lookup在指定的远程主机上查找对象,若找到就把它转换成本地接口Rem类型,然后像一个本地对象一样使用它。与CORBA不同之处在于RMI客户必须知道提供远程服务主机的URL,这个URL可以通过rmi://host/path或rmi://host:port/path来指定,如果省略端口号,就使用1099。Naming.lookup可能产生三个异常:RemoteException、NotBoundException、MalformedURLException,三个寻常都需要捕获。RemoteException、Naming和NotBoundException在java.rmi.*中定义,MalformedURLException在java.net.*中定义。另外,客户机将向远程对象传递串行化对象Serializable,所以还应在程序中输入java.io.*。

import java.rmi.*.
import java.net.*.
import java.io.*.
public class RemClient {
public static void main(String[] args) {
try {
String host = (args.length > 0) ? args[0] : "localhost". //从命令行读取远程主机名
//通过URL在远程主机上查找对象,并把它转化为本地接口Rem类型
Rem remObject=(Rem)Naming.lookup("rmi://" host "/Rem").
System.out.println(remObject.getMessage()). //调用远程对象的方法
} catch(RemoteException re) {System.out.println("RemoteException: " re).
} catch(NotBoundException nbe) {System.out.println("NotBoundException: " nbe).
} catch(MalformedURLException mfe){System.out.println("MalformedURLException:" mfe).
}}}

相关文章


基础入门-Java连接各种数据库的实例
面向对象编程:Java中的抽象数据类型
面向对象编程:Java的简单数据类型
面向对象编程:Java复杂数据类型用法
JAVA基础:在Java中实现远程方法调用
JAVA基础:GB2312汉字编码字符集
JAVA基础:浅谈Java中this的使用
Java内部类:如何在内部类中返回外部类对象
JAVA基础:java中数值变量与字符串互换
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛