论文部分内容阅读
摘 要:JAVA是一门适合于分布式计算环境的语言,JAVA RMI是开发纯JAVA的网络分布式应用系统的核心。本文通过实例介绍如何利用Applet调用RMI实现分布式网络计算。
关键词:RMI;Applet;分布计算
Abstract: Java is a language suitable for distributed computing environment, JAVA the RMI is a core of distributed application system to develop pure JAVA network. This paper introduced how to use the Applet call the RMI implementation of distributed network computing.Key words: RMI; the Applet; distributed computing
中图分类号:TP39文献标识码:A文章编号:2095-2104(2012)02-
一、引言
在计算机网络中,分布式计算机系统结构允许用户共享网络中的计算机资源,它可使一个单机作为多个客户机的集中工作服务器,一些对CPU和内存要求很高的应用程序,在客户机上不能良好地运行,则可以在网络中的服务器上执行。JAVA是一门适合于分布式计算环境的语言,除了具有很好的安全性和可移植性外,还提供了丰富的网络类库,利用这些类库,可以轻松编写网络程序。Java RMI(Java Remote Method Invocation)是开发纯Java的网络分布式应用系统的核心,它增强了Java开发分布式应用系统的能力。Applet结合RMI能实现更为灵活、强大的分布式系统,更充分利用服务器资源,最大程度减少对客户机的要求。
二、RMI简介
(一)RMI运行机制及结构
包含RMI的JAVA应用程序通常包括服务器端程序和客户机程序两个独立的程序。典型的客户机程序则从服务器中得到一个或多个远程对象的引用,然后调用运行于服务器端的远程对象中的方法。RMI为服务器端和客户机进行通信和信息传递提供了一种机制。
在与远程对象的通信过程中,RMI引入了标准的StubSkeleton(远程对象客户端代理服务器端框架)机制。Stub代表可以被客户端引用的远程对象,位于客户端并具有远程对象的接口或方法列表。当客户机调用Stub对象中的方法时,Stub通过RMI基础结构将调用请求转发到远程对象上,即由远程对象执行调用请求,而服务器端的Skeleton对象将处理有关调用“远方”对象中方法的所有细节,在请求调用远程方法期间,RMI基础结构自动调用Skeleton对象。在编写JAVA RMI应用程序时,由于引入了StubSkeleton机制,使得远程方法的调用与本地对象中的方法调用是一样的。而Stub和Skeleton对象并不需要自己编写代码,因为JDK中的rmic工具可以创建Stub和Skeleton对象的类文件。
(二)RMI的主要优点
从最基本的角度看,RMI是JAVA的远程过程调用(RPC)机制。RMI以JAVA为核心,可以采用本机方法与现有系统相连接。这就是说,RMI可采用自然、直接和功能全面的方式提供分布式计算技术,而这种技术能以不斷递增和无缝的方式为整个系统添加JAVA功能。
其主要优点如下:
1.面向对象:RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。
2.可移动属性:RMI可将属性(类实现程序)从客户机移动到服务器,或者从服务器移到客户机。
3.安全:RMI采取了JAVA内置的安全机制,可保证下载执行程序时用户系统的安全。
4.可连接现有/原有的系统:RMI可通过JAVA本机方法接口JNI与现有系统进行交互。
5.编译一次,随处运行:RMI是JAVA“编译一次,随处运行”方法的一部分。任何基于RMI的系统均可完全地移植到任何JAVA虚拟机上。
6.分布式垃圾收集:RMI采用其分布式垃圾收集功能,收集不再被网络中任何客户程序所引用的远程服务对象。
7.并行计算:RMI采用多线程处理方法,可使服务器利用这些JAVA线程更好地并行处理客户端的请求。
(三)RMI的客户端和服务器端
Java RMI分布式应用程序,其服务器端为远程接口类和远程接口实现类,一般由应用程序创建一个远程接口实现类的实例。而客户端可以有两种选择,一是Java Application,二是Java Applet。
三、在Applet中调用RMI对象实现分布式网络计算实例
分布式网络计算是依靠强大服务器的计算功能,由处于远端不同位置的客户机提供参数并发出指令交由服务器进行处理,计算结果再由服务器传输给客户端显示。以下通过一实例(在客户端输入矩形长、宽信息,传至服务器端进行计算求得面积值并在客户端显示)展示由Applet结合RMI实现分布式网络计算的强大优势。其工作模型如图所示。
编写此程序的基本步骤如下:
1.定义远程方法接口;2.实现远程方法接口类;3.在RMI服务器端编写创建远程接口实现类,创建远程方法的实例;4.RMI客户端通过连接RMI服务器端调用远程方法的实例;5.使用Applet实现RMI客户端。
本例定义名为result接口,定义名为resultImpl的Result接口实现类,RMI服务器端的类名为resultServer(创建resultImpl类的一个实例),Applet客户端的类名为resultApplet,引用resultApplet.class类的网页名为resultApplet.htm,rmi.policy文件规定用户计算机的各个端口的权限。鉴于文章篇幅有限,下面只列出程序的核心部分代码。
Result接口代码:
public interface Result extends Remote//定义接口
{public StringjsArea() throws RemoteException; //定义接口并抛出异常 }
实现Result接口的ResultImpl类代码:
public class ResultImpl extends UnicastRemoteObject implements Result //实现接口函数
{ public ResultImpl(String name) throws RemoteException //抛出RemoteException异常
{……{ //远程方法体内容,此处也可根据实际需求设置参数、编写算法。}}
在服务器端创建远程接口实现类(ResultImpl)的一个实例,其ResultServer类代码:
public class ResultServer
{{ …… { ResultImpl obj = new ResultImpl("resultArea");
//实现一个接口的实例,并将resultArea作为此接口的名字
System.out.println("Server ready");}//標识服务器端开始计算
catch (Exception e)
{ System.out.println("Error: " + e);//捕捉异常情况} } }
Applet客户端实现远程调用的ResultApplet类代码:
public void init()
{……public void button1_actionPerformed(ActionEvent e)
{……try { label1.setText("正在连接RMI主机...");//显示提示信息
result obj = (result)Naming.lookup(“rmi://211.82.173.156/resultArea”);
//假定RMI服务器的IP为211.82.173.156
mj = obj. jsArea (l,b);//调用远程方法
label1.setText(mj); //在客户端显示面积值}
{ label1.setText("Error: " + e1);//捕捉异常情况}} }
启动resultApplet类的resultApplet.htm文件代码:
Rmi.policy文件代码:
grant{ //允许本机的1024到65535号端口进行一切活动
permission java.net.Socketpermission “127.0.0.1:1024-65535”, “accept,connect,listen”}
在客户端可通过IE浏览器打开resultApplet.htm文档,在其中执行resultApplet.class类,输入相应的参数并发出指令后,Applet客户端会首先在指定的RMI服务器位置上寻找要调用的远程方法jsArea ()的实例,然后调用这个远程方法,运行服务器端程序时,RMI服务器端首先会输出“Server ready”文字,然后根据客户端传来的参数和指令后进行计算,得到结果后返回给客户端。
虽然本例仅实现一个简单的矩形面积计算,但客户端最终显示的结果是通过远程服务器计算所得到的。
四、结束语
RMI为面向对象的分布式计算提供了可靠的平台。它可循序渐进地将Java扩展到系统所有平台,人们可根据需要适时地添加Java服务器和客户机。从本文实例可看出随着网络技术的发展,Applet和RMI技术的结合使用必将在分布式网络计算方面发挥更大的作用。
注:文章内所有公式及图表请以PDF形式查看。
关键词:RMI;Applet;分布计算
Abstract: Java is a language suitable for distributed computing environment, JAVA the RMI is a core of distributed application system to develop pure JAVA network. This paper introduced how to use the Applet call the RMI implementation of distributed network computing.Key words: RMI; the Applet; distributed computing
中图分类号:TP39文献标识码:A文章编号:2095-2104(2012)02-
一、引言
在计算机网络中,分布式计算机系统结构允许用户共享网络中的计算机资源,它可使一个单机作为多个客户机的集中工作服务器,一些对CPU和内存要求很高的应用程序,在客户机上不能良好地运行,则可以在网络中的服务器上执行。JAVA是一门适合于分布式计算环境的语言,除了具有很好的安全性和可移植性外,还提供了丰富的网络类库,利用这些类库,可以轻松编写网络程序。Java RMI(Java Remote Method Invocation)是开发纯Java的网络分布式应用系统的核心,它增强了Java开发分布式应用系统的能力。Applet结合RMI能实现更为灵活、强大的分布式系统,更充分利用服务器资源,最大程度减少对客户机的要求。
二、RMI简介
(一)RMI运行机制及结构
包含RMI的JAVA应用程序通常包括服务器端程序和客户机程序两个独立的程序。典型的客户机程序则从服务器中得到一个或多个远程对象的引用,然后调用运行于服务器端的远程对象中的方法。RMI为服务器端和客户机进行通信和信息传递提供了一种机制。
在与远程对象的通信过程中,RMI引入了标准的StubSkeleton(远程对象客户端代理服务器端框架)机制。Stub代表可以被客户端引用的远程对象,位于客户端并具有远程对象的接口或方法列表。当客户机调用Stub对象中的方法时,Stub通过RMI基础结构将调用请求转发到远程对象上,即由远程对象执行调用请求,而服务器端的Skeleton对象将处理有关调用“远方”对象中方法的所有细节,在请求调用远程方法期间,RMI基础结构自动调用Skeleton对象。在编写JAVA RMI应用程序时,由于引入了StubSkeleton机制,使得远程方法的调用与本地对象中的方法调用是一样的。而Stub和Skeleton对象并不需要自己编写代码,因为JDK中的rmic工具可以创建Stub和Skeleton对象的类文件。
(二)RMI的主要优点
从最基本的角度看,RMI是JAVA的远程过程调用(RPC)机制。RMI以JAVA为核心,可以采用本机方法与现有系统相连接。这就是说,RMI可采用自然、直接和功能全面的方式提供分布式计算技术,而这种技术能以不斷递增和无缝的方式为整个系统添加JAVA功能。
其主要优点如下:
1.面向对象:RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。
2.可移动属性:RMI可将属性(类实现程序)从客户机移动到服务器,或者从服务器移到客户机。
3.安全:RMI采取了JAVA内置的安全机制,可保证下载执行程序时用户系统的安全。
4.可连接现有/原有的系统:RMI可通过JAVA本机方法接口JNI与现有系统进行交互。
5.编译一次,随处运行:RMI是JAVA“编译一次,随处运行”方法的一部分。任何基于RMI的系统均可完全地移植到任何JAVA虚拟机上。
6.分布式垃圾收集:RMI采用其分布式垃圾收集功能,收集不再被网络中任何客户程序所引用的远程服务对象。
7.并行计算:RMI采用多线程处理方法,可使服务器利用这些JAVA线程更好地并行处理客户端的请求。
(三)RMI的客户端和服务器端
Java RMI分布式应用程序,其服务器端为远程接口类和远程接口实现类,一般由应用程序创建一个远程接口实现类的实例。而客户端可以有两种选择,一是Java Application,二是Java Applet。
三、在Applet中调用RMI对象实现分布式网络计算实例
分布式网络计算是依靠强大服务器的计算功能,由处于远端不同位置的客户机提供参数并发出指令交由服务器进行处理,计算结果再由服务器传输给客户端显示。以下通过一实例(在客户端输入矩形长、宽信息,传至服务器端进行计算求得面积值并在客户端显示)展示由Applet结合RMI实现分布式网络计算的强大优势。其工作模型如图所示。
编写此程序的基本步骤如下:
1.定义远程方法接口;2.实现远程方法接口类;3.在RMI服务器端编写创建远程接口实现类,创建远程方法的实例;4.RMI客户端通过连接RMI服务器端调用远程方法的实例;5.使用Applet实现RMI客户端。
本例定义名为result接口,定义名为resultImpl的Result接口实现类,RMI服务器端的类名为resultServer(创建resultImpl类的一个实例),Applet客户端的类名为resultApplet,引用resultApplet.class类的网页名为resultApplet.htm,rmi.policy文件规定用户计算机的各个端口的权限。鉴于文章篇幅有限,下面只列出程序的核心部分代码。
Result接口代码:
public interface Result extends Remote//定义接口
{public StringjsArea() throws RemoteException; //定义接口并抛出异常 }
实现Result接口的ResultImpl类代码:
public class ResultImpl extends UnicastRemoteObject implements Result //实现接口函数
{ public ResultImpl(String name) throws RemoteException //抛出RemoteException异常
{……{ //远程方法体内容,此处也可根据实际需求设置参数、编写算法。}}
在服务器端创建远程接口实现类(ResultImpl)的一个实例,其ResultServer类代码:
public class ResultServer
{{ …… { ResultImpl obj = new ResultImpl("resultArea");
//实现一个接口的实例,并将resultArea作为此接口的名字
System.out.println("Server ready");}//標识服务器端开始计算
catch (Exception e)
{ System.out.println("Error: " + e);//捕捉异常情况} } }
Applet客户端实现远程调用的ResultApplet类代码:
public void init()
{……public void button1_actionPerformed(ActionEvent e)
{……try { label1.setText("正在连接RMI主机...");//显示提示信息
result obj = (result)Naming.lookup(“rmi://211.82.173.156/resultArea”);
//假定RMI服务器的IP为211.82.173.156
mj = obj. jsArea (l,b);//调用远程方法
label1.setText(mj); //在客户端显示面积值}
{ label1.setText("Error: " + e1);//捕捉异常情况}} }
启动resultApplet类的resultApplet.htm文件代码:
Rmi.policy文件代码:
grant{ //允许本机的1024到65535号端口进行一切活动
permission java.net.Socketpermission “127.0.0.1:1024-65535”, “accept,connect,listen”}
在客户端可通过IE浏览器打开resultApplet.htm文档,在其中执行resultApplet.class类,输入相应的参数并发出指令后,Applet客户端会首先在指定的RMI服务器位置上寻找要调用的远程方法jsArea ()的实例,然后调用这个远程方法,运行服务器端程序时,RMI服务器端首先会输出“Server ready”文字,然后根据客户端传来的参数和指令后进行计算,得到结果后返回给客户端。
虽然本例仅实现一个简单的矩形面积计算,但客户端最终显示的结果是通过远程服务器计算所得到的。
四、结束语
RMI为面向对象的分布式计算提供了可靠的平台。它可循序渐进地将Java扩展到系统所有平台,人们可根据需要适时地添加Java服务器和客户机。从本文实例可看出随着网络技术的发展,Applet和RMI技术的结合使用必将在分布式网络计算方面发挥更大的作用。
注:文章内所有公式及图表请以PDF形式查看。