基于J2EE框架的模拟考试系统
一、系统概述
本系统拟实现基本的网上模拟考试功能,包括学生登陆、在线考试、教师登陆、在线阅卷等模块。
二、设计目标
系统除了包含最基本的在线考试功能外,最主要的目的是演示J2EE框架的完整应用,包括jsp/servlet、java web start、消息Bean、会话Bean、实体Bean等J2EE框架中最核心的技术。系统中大量使用了设计模式中的工厂模式、单例模式、委派模式,以及J2EE核心模式中的DAO模式和Session facade模式,保证了系统的可扩展性和可插入性。
本系统针对不同的模块,使用了CMP和Hibernate两种OR映射,也试图通过使用本地接口和异步通信等手段优化系统性能。目标是使本系统在保证性能的同时,具有清晰的层次结构,以及良好的伸缩性和扩展性。这样的设计可能比较疯狂,理论价值大于实际价值。
三、方案描述
系统大致结构如下图:
系统使用了CMP对examer.student(学生数据表)、examer.teacher(教师数据表)、examer.examin(考试数据表)进行了映射,原因是这些数据结构相对简单,数据单纯,不需要进行非常复杂、多样的查询,系统对数据表的操作不频繁,通常情况下对性能不敏感,故采用了CMP。CMP中只提供最基本的查询方法,所有的程序逻辑都封装在对应的会话Bean中,会话Bean和CMP一同部署,故可以采用本地接口访问实体Bean,提高效率。客户端仅仅与会话Bean进行交互。该设计的好处是隐藏了数据逻辑,MVC的结构非常清楚。后期的数据维护也比较简单。
系统使用Hibernate框架对examer.question(试题数据表)进行映射,原因是该表格比较复杂,需要进行复杂多样的查询,Hibernate框架可以提供更加灵活的查询,便于扩展。同样的,Hibernate自身不含有商务逻辑,程序逻辑由对应的会话Bean封装,保证多层的隔离。由于系统可能会对底层数据表进行较为频繁的访问,所以可以考虑更改实现方式,由会话Bean直接使用DAO模式访问数据表,提高系统效率。
对于examer.answer(答案数据表),系统没有采取OR映射。原因是这个表格的数据保存学生的答题情况,在考试的过程中,该表格会被频繁操作,但是操作多是单向的(添加新数据),进行查询的时候不多。针对这个特点,系统采用消息Bean+会话Bean,使用DAO模式直接访问数据表,通过使用J2EE的消息服务提供了一种异步调用机制,保证数据安全可靠,同时效率又得到极大改善。
由于系统采用EJB开发,所以客户端丰富多样,既可以是基于浏览器的jsp/servlet,也可以是基于awt/swing/swt的桌面应用程序。为了便于多系统的集成,系统将EJB部署到Axis,提供web service接口,便于其他平台、其他语言的应用程序访问。
本系统的Model与control已经全部完成,view部分尚未开工。