RMI分布式时钟系统的设计与源码

posted @ 2012-11-25 07:27 from [FreedomShe]

    分布式课程的作业据说是百年不变——在我老板还是学生的时候就已经是这个题目了。网上一搜一大堆类似代码,喜欢自己写代码,自己去研究探索学习,作业不难,记录下来给某人做参考。

客户端和服务端界面

1. Java界面开发环境: Eclipse + Swing
2. RMI简介
3. 代码结构


1. Java界面开发环境: Eclipse + Swing

    Java GUI 工具包主要有AWT, SWT, Swing三种(技术出现先后顺序),用Swing开发界面,代码还是很简洁的。IDE一般选择NetBeans或者Eclipse+插件,如今WindowBuilder被Google收购以后免费了,直接集成在了Eclipse IDE for Java Developers内,下载即可进行Java界面可视化开发。
    Eclipse IDE for Java Developers-Eclipse Juno (4.2) SR1 Packages,下载(只有Eclipse IDE for Java Developers包含WindowBuilder,Eclipse IDE for Java EE Developers等版本均不包含WindowBuilder组件)。

参考:NetBeans VS Eclipse 开发SWT Swing应用

例程开发时Java版本:1.7.0_09


2. RMI简介

     RMI即远程调用,它的介绍太多了。通俗点讲,这个过程就是服务器端实例化一个类,然后客户端可以通过RMI绑定IP和端口来调用服务器端的这个实例的方法或变量,就如同这个实例是在客户端一样(实例是在服务器端运行)。客户端通过RMI与服务器端通信只需要知道:服务器端的IP和端口,客户端注册的实例的类的接口。以本地IP为例编程实现简单RMI的一般步骤为:

    1). 服务器端实例化一个类,并将其绑定在一个端口上(建立远程对象注册表,注册实例名等);
    2). 客户端实例化一个接口(服务器端被调用实例的那个接口,客户端需要预先获得接口定义),而符合该接口定义的实例则是通过RMI远程获得。
    3). 客户端可以远程调用符合这个接口定义的实例了。

    最简单的RMI例程参考:Java RMI之HelloWorld篇


3. 代码结构

    本例程的代码结构很清晰,共5个类,IService, ServiceImlp, RmiServer, RmiClient, ServerFrame, ClientFrame。他们的关系如下图:

程序结构类图

    可以看到,客户端程序包括IService, RmiClient, ClientFrame三个类,RmiClient封装了RMI远程调用相关的操作;ClientFrame则封装是客户端界面,也是程序的入口;IService是服务器端提供RMI服务的实例的接口类(如同C/C++里面调用一个dll,需要预先知道dll提供导出函数的头文件)。服务器端包括IService, ServiceImlp, RmiServer, ServerFrame四个类,IService前面已讲;ServiceImpl是IService的实现类,服务器端提供服务的实例就是由这个类实例化得到的;RmiServer是服务器端提供RMI服务操作的封装;ServerFrame则封装服务器端的界面。

    IService为服务器端提供服务类实例的接口文件,服务器端必须拥有该接口文件的一个实现类ServiceImlp,最后提供服务的实例就由ServiceImpl实例化;客户端也必须知道该接口文件,以便将RMI实例转换为IService实例使用。

IService接口
ServiceImpl类

    RmiServer是服务器端提供RMI服务的类,这里提供了绑定和取消绑定两个方法(取消绑定后客户端任然可以访问已经申请过的实例,但是不能再申请新的实例)。

RmiServer类

    RmiClient封装了客户端的RMI操作

RmiClient类

    ServerFrame和ClientFrame分别为服务器端和客户端的界面类,均集成自JFrame,Swing界面编写大体结构类似,一个main函数作为程序入口点,构造函数初始化界面,自己添加一些案件响应函数即可。本例中两个界面类均加入了一个定时器,server端定时器用于刷新时间,client端定时器用于向server端发送调用消息。安装Eclipse IDE for Java Developers后,用WindowBuilder Editor打开继承自JFrame的java文件(Eclipse里右键.java文件,选择Open with WindowBuilder Editor)即可进行可视化界面设计。

ServerFrame类
ClientFrame类

    以上是全部源码,按照services, client, server三包结构存放即可。

4

posted @ 2012-11-25 06:46  FreedomShe  阅读(...)  评论(... 编辑 收藏