文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发JavaJavaRMI入门实战
精品推荐
特别推荐
·实例讲解:Java中的SOAP技术
·Java语言出现的背景 影响及前景
·Java精华积累:初学者都应该搞懂的问题
·Java多媒体框架设计自动播放机实例详解
·如何有效防止Java程序源码被人偷窥?
·Cell插件在J2EE系统中的应用
·初学者想学Hibernate,初级基础教程
·Java语言实现支持视频点播的WEB服务器
·关于Java编程的中文问题的几条分析原则
·确保J2ME无线移动商业应用程序的安全性
·Java开源技术:Eclipse的使用技巧详解
·新手入门:Java中的修饰词使用方法总结
·JAVA开发者应该去的20个英文网站
·使用JDBC创建数据库访问程序
·JDK的命令详解
·Java学习从入门到精通(附FAQ)
·Tomcat性能调整
·JSF:Java中面向Web开发的生旦净末丑
·对Java语言入门初学者的一些建议
·Java技术的新方向
热点TOP10
·Java图形用户界面设计
·在桌面应用中使用JAVA DB
·3D编程指南第一部分:快速进入移动JAVA 3D编程世界
·用Java编写的记事本程序(1)
·java swing的拖放例子
·用Java编写的记事本程序(3)
·JasperReport经验谈
·图解JBuilderX安装与实践
·用java编写的小游戏源代码分析
·struts+spring+ibatis轻量级J2EE开发
·单源点最短路径Dijkstra算法的JAVA实现
·实例讲解:Java中的SOAP技术
·初学者想学Hibernate,初级基础教程
·中国农历二百年算法及年历程序分析一
·用Java实现SMTP服务器
·Java语言出现的背景 影响及前景
·Java Applet 入门第三天
·用Java编写的记事本程序(2)
·Java学习从入门到精通(附FAQ)
·通过JCA实现企业级应用程序的“即插即用”

JavaRMI入门实战

日期:2007年5月2日 作者: 查看:[大字体 中字体 小字体]



  为通过网络执行其他机器上的代码,传统的方法不仅难以学习,而且易出错。解决这个问题的最佳方法是:某些对象正好位于另一台机器,我们可以发送一条消息,并获得返回结果,就像位于自己的本机器一样。Java远程方法调用(RMI)特性使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。
  
  下面介绍一下必要的步骤,创建自己的RMI对象。
  
  一、远程接口概念:
  RMI对接口有着强烈的依赖。在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节。所以客户得到远程对象的一个句柄正好同一些本地的根代码连接,有后者负责通过网络通信。但我们并不关心这些事情,通过自己的接口句柄发送消息即可。
  
  创建一个远程接口时,必须遵守下列规则:
  
  1) 远程接口必须为public属性(不能有“包访问”;也就是说,他不能是“友好的”)。否则,一旦客户试图装载一个实现了远程接口的远程对象,就会得到一个错误。
  
  2) 远程接口必须扩展接口java.rmi.Remote。
  
  3) 除与应用程序本身有关的违例,远程接口中的每个方法都必须在自己的throws从句中声明java.rmi.RemoteException.
  
  4) 作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为远程接口,不可声明为实施类。
  
  下面是一个远程接口示例,
  
  //PerfectTimeI.java
  
  //The PerfectTime remote interface
  
  package test;
  
  import java.rmi.*;
  
  public interface PerfectTimeI extends Remote {
  
    long getPerfectTime() throws RemoteException;
  
  }
  
  它表面上与其他的接口类似,只是对Remote进行了扩展,而且所有的方法都会“掷”出RemoteException.接口和方法都是Public的。
  
  编译PerfectTimeI.java,生成PerfectTimeI.class(test是包,编译时注意路径)
  
  G:\RMI>javac test\PerfectTimeI.java
  
  二、远程接口的实施:
  服务器必须包含一个扩展了UnicastRemoteObject类,并实现远程接口。这个类也可以含有附加的方法,但客户只能使用远程接口中的方法。因为客户是指向接口的一个句柄,而不是它的哪个类。
  
  必须为远程对象定义构件器,即使只准备定义一个默认构件器,用它调用基础类构件器。必须把它明确地编写出来,因为它必须“掷”出RemoteException违例。
  
  下面列出远程接口PerfectTime的事实过程:他代表精确计时服务
  
  //PerfectTime.java
  
  //The implementation of the PerfectTime remote object
  
  package test;
  
  import java.net.*;
  
  import java.rmi.*;
  
  import java.rmi.registry.*;
  
  import java.rmi.server.*;
  
  public class PerfectTime extends UnicastRemoteObject implements PerfectTimeI
  
  {
  
  //默认构件器,也要“掷”出RemoteException违例。
  
    public PerfectTime() throws RemoteException {
  
      super();
  
    }
  
  public long getPerfectTime() throws RemoteException {
  
    return System.currentTimeMillis();
  
  }
  
  public static void main(String[] args) {
  
  /*创建和安装一个安全管理器,令其支持RMI.作为Java开发包的一部分,适用于RMI唯一一个是RMISecurityManager.*/
  
    System.setSecurityManager(new RMISecurityManager());
  
    try {
  
    /*创建远程对象的一个或多个实例,下面是PerfectTime对象*/
  
      PerfectTime pt = new PerfectTime();
  
    /*向RMI远程对象注册表注册至少一个远程对象。一个远程对象拥有的方法即可生成指向其他远程对象的句柄,这样,客户到注册表里访问一次,得到第一个远程对象即可.*/
  
      Naming.bind("PerfectTime", pt);
  
      System.out.println("Ready to do Time");
  
    } catch (Exception e) {
  
      e.printStackTrace();
  
    }
  
  }
  
  }
  
  编译PerfectTime.java,生成PerfectTime.class(test是包,编译时注意路径)
  
  G:\RMI>javac test\PerfectTime.java
  
  三、创建根和干:
   创建RemoteObject的主干和框架。要完成这个工作可使用rmic编译器,rmic编译器生成远程对象的存根和骨架。存根(Stub)是远程对象在客户端的代理,它将RMI调用传递给服务器端的骨架(Skeleton),后者负责将该调用传递给实际的远程方法输入如下:
  
  G:\RMI>rmic -d G:\RMI test.PerfectTime
  
   执行这个命令,
  
  若rmic成功运行,test目录里就会多出两个新类:
  
  PerfectTime_Stub.class
  
  PerfectTime_Skel.class
  
  它们分别对应的是根(stub)和干(skeleton).
  
  四、使用远程对象:
  RMI全部的宗旨就是可能简化远程接口对象的使用。我们客户程序中要做的唯一一件额外事情是查找从服务器取回远程接口。下面就是编写的Java程序:将消息发给对象:
  
  //DisplayPerfectTime.java
  
  //Users remote object PerfectTime
  
  package test;
  
  import java.rmi.*;
  
  import java.rmi.registry.*;
  
  public class DisplayPerfectTime {
  
  /*** DisplayPerfectTime 构造子注解。*/
  
  public DisplayPerfectTime() {
  
    super();
  
  }
  
  public static void main(String[] args) {
  
    System.setSecurityManager(new RMISecurityManager());
  
    try {
  
      PerfectTimeI t = (PerfectTimeI) Naming.lookup("PerfectTime");
  
      for (int i = 0; i < 10; i++) {
  
        System.out.println("PerfectTime:" + t.getPerfectTime());
  
      }
  
    } catch (Exception e) {
  
      e.printStackTrace();
  
    }
  
  }
  
  }
  
  编译DisplayPerfectTime.java.
  
  G:\RMI>javac test\DisplayPerfectTime.java
  
  五、启动注册并运行代码:
  在运行PerfectTime类和DisplayPectTime类之前,用户必须首先在将要宿主PerfectTime的计算机上启动RMI注册(Registry)程序,即使将要运行PerfectTime的计算机与运行DisplayPerfectTime的是同一台机器,这一步也是必须的。注册表服务器的名字是rmiregistry.在32位Windows环境中,可使用: start rmiregistry 令其在后台运行。然后分别开两个不同的进程运行Server端和Client端:启动注册表服务器:
  
  G:\RMI>start rmiregistry
  
  绑定PerfectTime到注册,运行服务端程序:在Windows下,输入下列命令,在后台启动PerfectTime程序:
  
  G:\RMI>java test.PerfectTime
  
  Ready to do Time
  
  运行客户端程序:如下
  
  G:\RMI>java test.DisplayPerfectTime
  
  PerfectTime:961722589649
  
  PerfectTime:961722589669
  
  PerfectTime:961722589679
  
  PerfectTime:961722589679
  
  PerfectTime:961722589689
  
  PerfectTime:961722589689
  
  PerfectTime:961722589689
  
  PerfectTime:961722589699
  
  PerfectTime:961722589699
[1] [2] 下一页 




上一篇:简析Java RMI 与 .NET Remoting

下一篇:为RMI实现类Jini的发现机制

JavaRMI入门实战 相关文章:
·最详细的黑客入门法则
·大智慧股票软件Level-2入门手册
·从零开始学黑客:网络黑客新手入门指南
·用Photoshop画漫画教程之基础入门
·Visual C++ ADO数据库编程入门
·破解入门教学(二)
·网页设计基础:Div+CSS布局入门教程
·MyEclipse JSF 快速入门中文版(上)
·Windows下C语言网络编程快速入门
·没有AP一样High 无线对等网实战(图)
JavaRMI入门实战 相关软件:
·孙鑫VC++从入门到精通开发详解视频教程FLASH版
·Photoshop 入门教程
·CorelDraw12 入门与实例(图文教程 菜鸟先飞系列教材)
·3ds max & NURBS曲面建模实战教程
·ASP入门教程
·催眠大师密训专业教程之入门指导手册(繁体版)
·Flash MX 从入门到精通
·AutoCAD2002入门与实例详解
·超级短线实战经典
·钢琴入门

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot