RMI实例详解.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
RMI实例详解

RMI实例详解 功能需求:实现最简单的远程文件访问。Client能够获取在Server上的远程文件信息。实例代码中,客户端获取了服务器端的文件“D:\\test\testDate.java”的内容和文件名。 实现结构: Server包含: FileInformation.java 描述文件信息的接口,作为远程访问方法的返回值类型 FileInformationImple.java 描述文件信息的接口实现 Hello.java 提供的远程访问方法的接口 HelloImple.java 远程访问方法的接口实现 Server.java 服务器开启程序 Client 包含: FileInformation.java描述文件信息的接口 (与上同) Hello.java提供的远程访问方法的接口(与上同) Test.java 客户端的运行程序 服务器端实现的具体步骤: 设计远程接口涉及的参数类型接口 设计远程接口 实现参数类型接口 实现远程接口 编写服务器启动程序 编写客户端测试用例 执行程序:可以在eclipse中直接执行,但是必须先运行服务器,再运行客户端。也可以在命令行下运行。次序要求同在eclipse中。步骤如下: 打开一个Dos窗口,执行命令java rmi.Server 启动服务器。启动成功会在命令行显示“Server start!” 打开另一个Dos窗口,执行命令java rmi.Test 运行客户端程序。运行成功则会在屏幕打印“D:\\test\testDate.java”的文件内容。 注意事项 本实例中并没有用到JDK所带的命令 rmic 编译实现类得到存根(Stub)类,也没用命令 rmiregistry 命令来启动RMI注册服务。在启动 rmiregistry之前必须能让它加载到相应的stub类,这就是造成**_Stub 类找不到的原因。本实例中通过“LocateRegistry.createRegistry(1099);”避免了这种错误。 如果要从另一台启动了RMI注册服务的机器上查找hello实例: Hello hello = (Hello) Naming.lookup (//05:1099/Hello) ; 其中的IP地址和端口号1099为 RMI 注册服务器的IP和端口号,这样Client就可以在另一台机器运行。 无论是服务端还是客户端都可以用参数 。 此时可以像JNP一样从网络上动态加载类文件。而你Web ServerYourServerName/YourPackagePathName/目录下应该有一个与你的包同名的目录,那个目录下有相应stub文件出现错误: ? 这是因为在Client端没有设置安全管理器,要象Server起动时那样给一个java.security.policy属性允许它做相应socket工作(否则会出安全性异常),之后客户端就能自动从主机下载了stub文件了。 ? 如果设置的安全管理则必须编写相应的访问策略文件。 并且在执行时指定参数。 可以拿单独一台机器运行 rmiregistry 。 rmiregistry需要能加载到相应的stub类,可以通过设置classpath。或者使LocateRegistry.createRegistry(port) ,只作为 RMI远程对象的RMI集中注册的服务器,真正提供服务对象只往上注册,客户端只需从注册服务器上查找远程对象引用,然后调用远程方法,具体由谁提供服务由注册服务器来帮助联络。 还可以用 RMI Activation 编程方式来实现RMI远程方法调用,具体请参考 /j2se/1.4.2/docs/guide/rmi/activation.html 为什么要序列化远端接口中的参数(返回值)这是因为需要将客户端的对象(参数)转化成byte stream,通过网络协议传输到服务端,再还原成服务端的对象进行调用。或者是需要将服务端的对象(返回值)转化成byte stream,通过网络协议传输到服务端,再还原成客户端的对象进行调用。在 jdk中, java.lang包和java.util包下的类都已经实现了序列化,直接可以用在远程接口中作参数或返回值;所有的基本类型也可以直接用在远程接口中作参数或返回值; package rmi; import java.rmi.Remote; import java.rmi.RemoteException; //远程接口必须扩展接口java.rmi.Remote public interface Hello extends Remote { //远程接口方法必须抛出 java.rmi.RemoteException //远程接口方法中的参数和返回值都必须可序列化 FileInformation getF

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档