欢迎来到论文网! 识人者智,自知者明,通过生日认识自己! 生日公历:
网站地图 | Tags标签 | RSS
论文网 论文网8200余万篇毕业论文、各种论文格式和论文范文以及9千多种期刊杂志的论文征稿及论文投稿信息,是论文写作、论文投稿和论文发表的论文参考网站,也是科研人员论文检测和发表论文的理想平台。lunwenf@yeah.net。
您当前的位置:首页 > 科技论文 > 计算机论文

利用语言与平台特性改进RMI分布计算框架

时间:2011-04-23  作者:秩名

论文导读:RMI(Remote Method Invocation)是Sun设计的基于Java的轻量级分布对象计算解决方案。RMI不但在本身的体系结构设计上非常优秀,它还利用和继承了Java平台的若干得天独厚的特性,譬如平台无关性、(分布)垃圾回收、安全性、代码移动性、类动态加载等等。
关键词:Java,RMI,Stub/Skelton,Serialization,DynamicProxy,DynamicClassLoading
1引言
至今为止,几乎所有的分布式计算框架都采用了Stub/Skelton设计,如OMG的CORBA、
MicroSoft的DCOM、Sun MicroSystems的RMI,以“通明化“远程调用。动作序列一般如下:客户端的远程调用”代理“给Stub,Stub与客户端分布计算引擎交互,客户端的引擎与服务器端的引擎通信,传递调用信息,服务器端的分布计算引擎与Skeleton交互,Skeleon将远程调用转发给远程对象实施。然后,再沿相反的路径传回结果。如图1所示.

图1

RMI(Remote Method Invocation)是Sun设计的基于Java的轻量级分布对象计算解决方案。RMI不但在本身的体系结构设计上非常优秀,它还利用和继承了Java平台的若干得天独厚的特性,譬如平台无关性、(分布)垃圾回收、安全性、代码移动性、类动态加载等等。它是EJB和JINI的分布特性支持技术。

2RMI的编程模型和本质

2.1RMI的编程模型
2.1.1定义远程接口
public interface HelloWorld extendsRemote{
public StringreturnGreeting(String param) throws RemoteException;
}
这个接口定义了远程对象行为,RMI规范规定远程接口需要直接或间接扩展Remote接口
并且方法签名需要抛出RemoteException异常。
2.1.2 实现远程接口
public class HelloWorldImpl extends UnicastRemoteObject implements HelloWorld{
publicHelloWorldImpl() throws RemoteException { super(); }
public StringreturnGreeting(String param) {
return “Hello”+param;
}
}
2.1.3 服务器端(Main.java)生成远程对象,并利用registry将之与一定的名字绑定。
/* …… … … */
HelloWorldImpl hwi =new HelloWorldImpl();
Naming.bind(“HelloWorld”,hwi);
/* … … … … */
2.1.4 创建客户端(Client.java)
/* … … … … */
System.setSecurityManager(new RMISecurityManager());
HelloWorld hw = (HelloWorld)Naming.lookup(“rmi://localhost/HelloWorld”);
System.out.println(hw.returnGreeting(“World”));
/* … … … … */
2.1.5 编译源代码
javacHelloWorld.java HelloWorldImpl.java Main.java Client.java
产生文件HelloWorld.class、HelloWorldImpl.class、Main.class、Client.class、
HelloWorldImpl_Stub.class、HelloWorldImpl_Skel.class。
2.1.6 运行系统
服务器端首先配置文件HelloWorld.class、HelloWorldImpl.class、Main.class、
HelloWorldImpl_Stub.class、HelloWorldImpl_Skel.class文件,然后执行
java rimregistry
java Main
客户端首先配置文件HelloWorld.class、HelloWorldImpl_Stub.class然后执行
java Client

2.2RMI的本质
这里我们以上面叙述编程模型时使用的实例来描述追踪RMI的运作,从而探出本质。
2.2.1 服务器(Main.java)中,
HelloWorldImpl hwi = newHelloWorldImpl();
Naming.bind(“HelloWorld”,hwi);
上面两句,实现了远程对象的导出(export),并将之与名字HelloWorld绑定。
这里我们需要深入探讨,直入本质,因为我们的改进的一部分就是在这里着手的。因为HelloWorldImpl继承了UnicastRemoteObject,而UnicastRemoteObject在构造函数中通过exportOjbet将对象导出到特定端口,以使得对象可被远程引用。ExportObject将远程对象置入一个ObjectTable中,并且加载HelloWorldImpl_Stub,并且将Stub与名字绑定。而不是一般认为的远程对象。这样作的目的主要是考虑到远程对象作为参数或返回值的时候,只能传入Stub,而不能移动远程对象实体,满足分布式环境计算的需要。
2.2.2 客户端(Client.java)中,
HelloWorld hw =(HelloWorld)Naming.lookup(“rmi://localhost/HelloWorld”)解析。自然,在使用远程对象之前,需要获得远程对象引用。这一步是通过registry来实现的,registry事实上,是rmi专用的名字服务工具。它也是远程对象,默认运作在2009端口,也可以使用LocateRegistry.createRegistry()在特定端口导出它。客户端的lookup操作会首先取得服务器端registry的远程引用,然后使用远程引用再查询HelloWorldImpl,从服务器端获得的远程引用事实上是一个Stub,所以我们上面的hw事实上是代表Stub的RemoteObject。到此为止,我们已经取得了远程对象的远程引用。
2.2.3 客户端(Client.java)中hw.returnGreeting(“World”)解析。

查看相关论文专题
加入收藏  打印本文
上一篇论文:利用以太网通道技术实现线路热备
下一篇论文:利用组合分析两原理阐释全概率公式
科技论文分类
科技小论文 数学建模论文
数学论文 节能减排论文
数学小论文 低碳生活论文
物理论文 建筑工程论文
网站设计论文 农业论文
图书情报 环境保护论文
计算机论文 化学论文
机电一体化论文 生物论文
网络安全论文 机械论文
水利论文 地质论文
交通论文
相关计算机论文
最新计算机论文
读者推荐的计算机论文