首页 > 资讯 > 网站设计
关于远程方法调用(RMI)的实现
发布时间:2005-03-17   浏览次数:1153474
远程方法调用 远程方法调用(Remote Method Invocation ,RMI)使用户能访问在另一 主机上的Java对象,并远程调用其方法。程序的对象是客户,而远程对象是服 务器。远程对象也可以是另一个远程服务对象的客户。通过使用持续性(串行 化和解串行化),本地对象和原始类型值可以作为参数传递给远程对象。这种 方式允许Java程序可以利用分布式计算将工作量分散到多个Java虚拟机上。 工作原理 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:05/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 05 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:05/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 参考: 《JAVA 编程思想》 《轻松掌握JBUILDER2》 《SUN JDK文档》 -- 我思,故我在 来源:http://edu.chinaz.com
业务咨询

Copyright 2003 - 2023 huinet.cn All Rights Reserved.
慧网公司 版权所有