丁莉
(西安医学院 卫生管理系,陕西 西安 710021)
基于RMI的学生成绩查询系统设计与实现
丁莉
(西安医学院 卫生管理系,陕西 西安 710021)
文中就学生成绩查询系统,提出了一个基于RMI技术的系统模型,以解决学校对学生成绩管理及学生对成绩查询的问题。文中采用分布式对象J2EE/RMI技术,完成了服务器程序和客户机程序的设计,实现了远程对象之间的无缝调用。管理员可以对数据库里的教师,学生信息进行修改,老师可以及时地填写学生成绩,学生在客户端查看自己的成绩等功能,提高了学校教务管理效率,减少了工作量,具有实用意义。
JAVA;RMI;数据库;成绩管理
一直以来人们管理档案的方式都采用人工管理,这种管理方式不仅效率低、保密性差,而且因为档案数据量大,所以查找、更新和维护都十分困难。本文采用分布式对象J2EE/ RMI技术,设计实现了学生成绩查询系统,将成绩管理等工作系统化,网络化,使得大规模的成绩录入等工作简洁化,成绩管理更加快捷有效。
图1 RMI体系结构图
Java远程方法调用,即 Java RMI(JavaRemote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口[1]。RMI机制实现程序组件在不同操作系统之间的通信,它大大增强了Java开发分布式应用的能力[2]。RMI体系结构采用典型的层次设计风格,从上至下分别由桩/框架层、远程引用层和传输层共3个层次组成,各层之间明确定义了接口与协议,如图1所示。
RMI系统采用类似 CORBA的对象请求代理机制,桩(stub)是远程对象在客服端的代理,客服程序中是远程对象引用其实是对本地桩的引用。桩负责将远程调用请求通过远程引用层和传输层转发给服务端的框架(skeleton),再由框架将请求分派给服务程序中的对象实现[3]。在与远程对象的通信过程中,RMI将使用标准机制 (用于 RPC系统):stub与skeleton[4]。stub担当远程对象的客户本地代表或代理人角色。在远程虚拟机中,每个远程对象都可以有相应的skeleton,负责将调用分配给实际的远程对象实现。RMI是一个分布式对象模式。它使得使用Java开发分布式程序更加容易。由于不需要设计协议(这基本是一个错误的任务)使得使用RMI开发分布式程序比使用socket更加容易。在RMI里面设计者就象在调用一个本地的类的方法一样,而实际上是在调用的时候相应的参数被发送到远端的对象和然后被解释。最后结果返回给调用者。一个RMI应用的流程,使用RMI开发一个分布式应用包括如下几个步骤:
1)定义一个远端的接口;
2)实现这个远端的接口;
3)开发一个服务端;
4)开发一个客户端;
5)生成Stubs和Skeletons,运行RMI注册器,服务端 和客户端。
1)系统总体设计
系统采用三层体系结构,遵从一般的分布式系统结构的设计,分为“用户层”、“业务逻辑层”和“数据层”。在RMI体系结构里:
用户层即用户的图形操作界面,只需要具有一定的图形能力和简单的数据处理能力。用户界面用SWING来设计,依照Java语言中的GUI设计规范。最终是界面形式是标准Windows窗口形式。管理员主要通过鼠标操作,来进行系统管理,学生信息,教师信息,班级信息等一系列活动。
程序流程图如图2所示:
图2 系统总流程图
2)数据库设计
在MySQL里新建一个名为student的数据库,实现数据的存储需要。数据库一共包含7张表,分别是:管理员信息表dt_admin,学生表dt_student,教师信息表dt_teacher,课程信息表dt_course,班级信息表di_class,成绩表dt_score,授课表dt_teacher_course。各表之间的关系如图3的E-R所示。
图3 E-R图
1)对象接口定义
在系统需求分析里我们已经分析了软件的基本功能,定义了“用户”和“管理员”两个基本对象,并分析了两者的基本功能和操作。因此,只要按照这个功能来定义不同对象的操作,再按照数据结构里分析的不同类型的数据结构,为系统定义所需要的数据结构。
学生类对外提供数据访问接口,隐藏内部具体细节的实现,服务层只需要调用学生的接口即可,修改内部实现细节的时候不需要更改服务层,这也符合面向对象类的设计原则。
2)编译*.class文件生成桩与框架
编译后的Java类名,含有远程对象的实现,rmic编译器根据此类名,为实现java.rmi.Remote接口的对象即远程对象,生成stub和skeleton。rmic命令中所给类,都是经过javac命令成功编译且经过完全包限定的类。例如,按如下所示对类文件名HelloImpl运行rmic:rmic hello.HelloImpl,这将创建HelloImpl_Skel.class和HelloImpl_Stub.class文件。
远程对象的 skeleton是服务器端实体,它包含一个方法,该方法将调用分配给实际的远程对象实现[5]。stub是远程对象的代理,其主要作用是将远程对象的方法调用转发给实际远程对象所在的服务器,客户机对远程对象的引用实际上是对stub的引用。stub只实现远程接口,而并不实现任何的本地接口,远程对象则可以将两者都实现。因为stub与远程对象本身实现的是同一个远程接口集,所以客户机可以用 Java语言的内置操作符进行强制类型转换和类型检查。用rmic命令,编译所有的服务层.class文件,得到相应的Stub文件。
3)编写对象实现和服务程序
①对象实现
服务层对外提供业务接口,客户端实际调用的是用rmic指令编译后生成的Stub.class,通过http协议,传递给服务器端,调用相应的实现类。调用程序将调用本地stub的方法,而本地stub将负责执行对远程对象的方法调用[6]。在RMI中,远程对象的stub与该远程对象所实现的远程接口集相同。调用stub的方法时将执行下列操作:
初始化与包含远程对象的远程虚拟机的连接;
对远程虚拟机的参数进行编组(写入并传输);
等待方法调用结果;
解编(读取)返回值或返回的异常;
将值返回给调用程序。
为了避免调用机制看起来过于复杂,参数的序列化和网络级通信等细节都在stub中进行了隐藏处理。在远程虚拟机中,每个远程对象都可以有相应的skeleton。Skeleton负责将调用分配给实际的远程对象实现。它在接收方法调用时首先读取远程方法的参数,调用实际远程对象实现上的方法进行处理,最终将结果写入并传输给调用程序。
上述的stub和skeleton由rmic编译器生成。以Teacher接口为例,继承UnicastRemoteObject并实现,TeacherServiceDao接口。向数据库中添加教师信息,服务层调用Teacher的数据访问层add(Teacher teacher)方法,实现对教师信息的增加功能,
②服务程序:
对象实现仅仅是定义了一种类型而已,真正执行服务的对象实例(即伺服对象)必须在一个服务进程中创建。然后在客户程序里对其进行调用,完成客户端的相应请求。
4)客户程序的编写
客户程序必须获得远程对象的引用才可调用远程对象的方法,一般情况下,远程对象引用可通过其他远程方法调用的参数或返回值获取,但第一个远程对象引用则必须借助基于URL的RMI注册表,将服务程序发布的对象标识解析为远程对象的引用[7]。
例如在客户端(视图界面)调用服务层的方法,首先就是要用lookUp()方法,获得远程服务对象。初始化学生信息窗口,在客户端程序启动时,init()方法获取远端班级服务接口(ClassesServiceDao)和学生服务接口(StudentServiceDao),因为在初始化学生信息窗口的时候,要从数据库中获取该学生所在班级,姓名等基本信息,在查询学生成绩时,要通过这些接口来获取该学生的各科成绩。
文中采用Java RMI服务器框架设计实现了学生成绩查询系统,完成了管理员管理、教师录入成绩以及学生查询成绩等基本功能。通过从系统设计、数据库设计、操作界面设计到系统功能模块的实现以及系统测试,进行了一个完整的系统设计,这是一个较完整的系统设计的开发流程。
[1]刘晖,沈钧毅,林欣.用CORBA创建电子商务系统[M].北京:北京希望电子出版社,2000.
[2]高雅侠,邹海荣.基于Java的RMI技术的研究与应用[J].计算机与数字工程,2011(8):174-177.
[3]谭昊勋,龙海洋,郑娟.基于Java RMI的分布式计算[J].湘潭大学自然科学学报,2005(2):59-61.
[4]肖统民.基于设计模式的可重用Web数据库应用软件的研究[J].计算机与现代化,2006(7):42-44.
[5]佘科华,李杰.基于Java-RMI的移动代理技术的研究[J].微计算机信息,2009(3):247-248.
[6]张晞,用RMI进行分布式Java编程[J].职大学报,2004(2): 35-38.
[7]杨晓梅,于长云,张冬梅.Java RMI与CORBA在分布式系统开发中的研究[J].天津理工大学学报,2005(4):4-8.
The design and implementation of student performance management system based on RMI
DING Li
(Health Services Administration,Xi`an Medical University,Xi'an 710021,China)
In this paper,came up with a model of system based on RMI technology for student performance management system,in order to solve the problem of student performance management and the scores query.Based on the distributed object J2EE/RMI technology,completed the design of the server program and client program,realized the remote objects seamlessly between calls.Administrators can change information of teacher and student,the teacher can fill in student achievement in a timely manner,student check their grades in client,The system improve the efficiency of the school,educational administration management,reduce the workload,it has practical significance.
JAVA;RMI;database;performance management
TN02
A
1674-6236(2016)16-0035-03
2015-10-29稿件编号:201510222
丁 莉(1987—),女,山西运城人,硕士研究生,助教。研究方向:物联网技术,传感器网络,系统分析。