王熹玮,张劲松
(1.武汉邮电科学研究院湖北武汉430074;2.武汉长江通信智联技术有限公司湖北武汉430074)
基于Java EE应用的车辆管理系统的设计
王熹玮1,张劲松2
(1.武汉邮电科学研究院湖北武汉430074;2.武汉长江通信智联技术有限公司湖北武汉430074)
为了对集团公司的所有车辆进行集中管理,提出了一种基于Java EE体系架构的车辆管理系统的设计方案,并完成了详细的设计。系统主要采用Spring MVC设计模式以及使用Spring整合Hibernate对系统的前台架构进行设计,能够对跟踪车辆的GPS信息,报警信息以及对车辆终端进行指令的下发,以便于操控车辆。
Spring MVC;Hibernate;Java EE;GPS信息
现在互联网物联网技术高速发展,信息化管理平台越来越被集团公司所青睐。建设一个集中部署的集团车辆管理系统,为司乘人员提供行车信息服务,为各级管理人员提供分析决策工具,满足集团公司对车辆实时监控和管理的需要,实现集团车辆的科学化管理的解决方案。车辆管理系统是为满足优化集团公司物流管理中的车辆运输生产、建立科学的车辆运输管理系统的需要。伴随着网上相应B/S架构的网页越来越多,使得人们能够方便高效地工作。然而之前的网络应用没有一套完整高效的开发体系,使得软件在开发的过程中开发效率低、开发周期长,这些缺点限制了Web应用的发展。随后出现了Java EE体系,规避了之前的诸多缺点,而且Java EE也成为企业级网络应用程序的开发标准。但是,在Java EE应用程序的开发过程也出了许多问题[1]:
1)随着面向对象技术的发展,但是我们底层还是使用的是关系型的数据库,我们在使用这两种技术必然会存在某种矛盾:两者之间的映射;当我们使用一种面向对象的语言来进行应用开发时,到了持久层数据库访问时又必须重返关系数据库的访问方式,这是非常糟糕的。
2)在传统的Java EE应用程序中,企业级Entity Java Beans(EJB)是企业级应用框架的基本单元。但是EJB对应用系统的组件的依赖度过高,使得我们队EJB组件进行测试很艰难,使得我们在开发过程中对其进行调试需要花费大量的时间。
3)对于一个大型的企业级应用,业务逻辑对象数量很多而且对象之间的依赖关系必定十分复杂。所以,如何对它们进行集中管理,使各组件之间可以相互地解耦也是一个问题。
基于引言中提到所存在的问题,我们所设计的车辆管理系统提出使用一种ORM框架Hibernate,Hibernate提供了Java类到关系数据库表之间的映射关系[2]。此外,使用一种轻量级Java EE框架Spring中的IoC容器来管理持久层中的业务对象,使得业务逻辑组件之间可以松散耦合,提高了系统的可维护性和可拓展性。
Hibernate框架是一种轻量级Java EE应用的持久层解决方案,它是对象关系映射(ORM)框架中的一种。当前流行的数据库依然是关系型数据库,而Java语言则是面型对象的语言,它完成对象模型和基于SQL的关系模型的映射关系,使得开发者可以完全采用面向对象的方式来开发应用程序[3-4]。
Hibernate还提供了数据查询和恢复机制。和传统的使用JDBC和SQL来人为地操作数据库,Hibernate可以帮我们很大程度上地减少操作数据库的时间。另外Hibernate还简化了装载类的过程,通过利用Hibernate本身提供的Hibernate Query Language,从而减少了持久化层代码的编写量,节省时间。
在本次设计中我们系统采用Spring Data JPA规范,我们这里所说的JPA只是一种规范,可以把它理解成一种ORM规范,因此当使用JPA进行持久化时,底层一定要有具体的ORM框架作为实现。比如现在系统使用的ORM框架是Hibernate,如果以后想使用其他的ORM框架,你并不需要修改代码,只要遵循JPA的规范,可以直接修改配置文件换成其他ORM框架,如Mybatis、topLink等[5]。
Spring作为一个轻量级的解决方案,它为企业级应用提供了便捷。该解决方案包括:基于依赖注入(IoC)的核心机制,基于AOP的声明式事务管理,与多种关系对象映射框架的整合,以及维护性好的MVC框架等。Spring致力于Java EE应用各层的解决方案。
IoC叫做控制反转,又叫依赖注入,Spring框架的基础。不管是依赖注入还是控制反转,其含义都相同:控制反转是一种设计思想,IoC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。我们以前对程序进行编码时,直接使用new关键字创建对象,是程序主动地去创建对象,并管理调用者和被调用者之间的依赖;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建,然后将所创建的依赖的对象,然后注入到我们所需要的类中[6-7]。
系统整合Hibernate框架和Spring框架,通过使用Spring MVC设计模式来完成表现层、业务逻辑层、控制器层和持久化层的装配。表现层主要是使用JSP来进行前端页面的展示;控制器层主要是用Spring自带的前端控制器和相应的XML配置文件进行前端HTTP请求的接收和转发;Model层主要是处理域对象的装配,任何Java对象都可以被Spring容器注册为Bean进行管理。
通常各个业务逻辑组件都需要通过调用另外的一些业务对象来处理具体的业务逻辑,各个业务逻辑组件之间相互调用依赖。对于小型项目业务对象之间关系简单数量较少,我们可以很容易管理这个独享之间的依赖关系。但是随着项目的逐渐扩大,业务对象越来越多,开发者通过使用Spring框架的IoC容器来管理这些业务逻辑组件,并且对于这些bean的生命周期可以由Spring的IoC容器来管理,使开发人员减少工作量[8]。整个架构的业务流转如图1所示。
用户向后台发起请求,然后被前端控制器拦截,前端控制器将我们的请求进而转发给我的页面控制器,页面控制器收到请求后做相应的业务逻辑处理,返回数据模型,然后将我们得到的数据视图渲染后展现出来。
图1 系统业务流程图
车辆监控模块分为6个功能项29个功能点,为车辆运输提供事中监控和事后分析。事中对车辆行驶过程、行车状态进行实时监控,并提供多种监控管理方式,通过指令交互可对终端下发指令进行远程操作,对于行驶过程中的违规行为,系统提供超速、疲劳驾驶等43类报警。事后可通过轨迹回放等功能对行驶轨迹进行分析,为司乘人员的考核提供依据。车辆监控模块主要实现的功能包括实时监控、指令交互、行驶记录、电子地图、监控管理、违规报警。车辆监控模块构成图如图2所示。
图2 车辆监控功能点
车辆监控模块设计整体遵循系统整体架构的分层设计,由展现层、业务层、应用组件组成,采用分层架构模式与MVC架构模式结合使用,其视图(View)、控制器(Controller)对应展现层,业务模型(Model)对应业务层和应用组件。业务层功能实现主要依赖应用组件来实现,本模块主要调用的组件有数据推送组件、车联网数据组件、流程组件,辅助性的组件有业务数据组件、日志组件、系统鉴权组件、异常分析组件,本模块中涉及到的组件作为黑盒框架使用,其组件的设计详见应用组件设计。
车辆监控由实时监控、指令交互、行驶记录、电子地图、监控管理、违规报警6大功能项组成:
1)实时监控:主要包括车辆定位、车辆查找、车辆点名、自动点名、上下线提醒等功能,调用数据推送组件、车联网数据组件、业务数据组件、日志组件、系统鉴权组件、异常分析组件进行实现,通过关系数据引擎、内存数据引擎、分布式数据引擎与关系数据库、内存数据库、分布式数据库进行交互;
2)指令交互:主要包括指令管理、终端拍照、单向监听、多媒体管理、驾驶员身份识别、短信下发、交互记录等功能,调用数据推送组件、车联网数据组件、业务数据组件、日志组件、系统鉴权组件、异常分析组件进行实现,通过关系数据引擎、内存数据引擎、分布式数据引擎与关系数据库、内存数据库、分布式数据库进行交互;
3)行驶记录:主要包括历史位置查询、单车轨迹分析、生成轨迹路线图、单车报警轨迹分析等功能,调用车联网数据组件、业务数据组件、日志组件、系统鉴权组件、异常分析组件进行实现,通过关系数据引擎、分布式数据引擎与关系数据库、分布式数据库进行交互;
4)电子地图:主要包括地图操作、地物查询等功能,调用业务数据组件、日志组件、系统鉴权组件、异常分析组件进行实现,通过空间数据引擎与空间数据库进行交互[8-9];
5)监控管理:主要包括定时定位查询、黑名单管理、重点关注、多屏监控、设备状态检测、行驶记录仪管理等功能,调用数据推送组件、车联网数据组件、业务数据组件、日志组件、系统鉴权组件、异常分析组件进行实现,通过关系数据引擎、内存数据引擎、分布式数据引擎与关系数据库、内存数据库、分布式数据库进行交互;
6)违规报警:主要包括超速报警、疲劳驾驶报警、紧急报警、越区报警、报警管理、报警处理等功能,调用车联网数据组件、流程组件、业务数据组件、日志组件、系统鉴权组件、异常分析组件进行实现,通过分布式数据引擎、关系数据库与分布式数据库、关系数据库进行交互[11-12]。
图3展示了服务的内部交互关系,分为3个层次,数据处理层、数据采集层和终端层,终端层的5种终端通过数据采集层的终端接入服务及内部数据接入实现与数据处理层的数据交互。
图3 服务内部交互关系图
数据处理层的报警升级服务、GIS应用计算服务、系统接入服务、数据推送服务、GIS数据访问更新服务、通知服务通过与内存数据交互服务与内存数据库实现数据交互,日志收集服务、报表服务主要向关系数据库推送数据,大数据计算服务和报警服务通过内存数据交互服务及分布式数据交互服务向数据库推送数据[13]。
根据车辆监控模块的实时监控、指令交互、报警处理以及对车辆工况及其他状态信息的监测、分析等业务需求,需要对车载终端上传的GPS原始数据、OBD及全传感器原始数据进行分析和解析,同时需要将平台的处理指令下发到车载终端;这些功能多和终端设备以及具体的协议相关,相对独立,且专业性较强,故将此功能封装成一个单独的服务,以方便上层业务以及其他服务调用。
终端接入服务主要是指各种类型的终端,包括北斗/GPS车载终端、OBD终端、全传感器终端经过协议解析程序后,生成标准的系统内部可以识别的数据包的过程;另外,终端接入服务还负责终端指令的下发和解析。
根据车辆监控模块的违规报警业务和安全管控模块的安全考核管理业务的需求,需要通过系统预设的报警条件进行报警计算、报警推送以及报警信息存储。这些功能都和报警计算相关,关联性较大,需要进行功能整合,封装成一个独立的服务,以方便业务层和其他服务层调用,因此产生报警计算服务设计。
报警计算服务主要包含报警计算、报警推送、报警处理以及报警存储。报警计算通过GPS/OBD数据,按照报警规则生成平台类报警[14-15]。通过GPS/OBD数据的报警标识位生成终端类报警;报警处理是指监控员在页面前端发出报警处理请求后,报警计算服务需要对报警信息缓存进行更新并将终端报警的报警处理请求通过终端接入下发至终端,同时将报警处理结果写入关系型数据库。
根据车辆监控模块的违规报警业务、安全管控、车辆监控等模块与后台服务数据交互的需求,需要通过coherence缓存,和缓存监听的方式对数据进行传输和管理。这些功能都和内存数据库交互相关,关联性较大,因此进行功能整合,封装成一个独立的服务,以方便业务层和其他服务层调用,因此产生内存数据库交互服务设计。
数据推送服务如图4所示,包括车辆定位数据推送、报警数据推送、指令结果推送、上下线推送、驾驶员身份验证结果推送和页面通知数据推送。
客户端访问服务器的同时,页面后台通过websocket与服务器建立单独的后台数据通道。该通道区别于传统的网页数据传送:
1)该通道是双向的,可以由服务端主动地向客户端推送数据,页面更新灵活;
2)通信过程中没有http请求,数据包内容更简练,传送压力小。
图4 数据推送服务逻辑架构图
数据推送服务上层交互对象为业务层,下层交互对象为数据支撑层;车辆定位数据、报警数据和指令结果数据则通过车辆定位数据推送、报警数据推送、指令结果推送监听内存数据库,触发推送,不被业务层直接调用。数据推送服务使用内存数据引擎与内存数据库进行交互,此服务不是一个独立的进程服务,作为系统的构件运行在Web容器中[16]。
数据推送服务所涉及的数据主要是车辆定位数据、报警数据、指令结果数据。车辆定位数据、报警数据、指令结果数据是车辆终端采集的车辆数据。页面通知数据是业务层模块运行时,要推送到用户页面的数据。
数据推送服务采用内存数据库存储数据,便于快速、高效的读写实时数据,同时内存数据库提供数据监听接口,便于主动、及时的向客户端推送最新数据。
车辆定位数据、报警数据、指令结果数据数据量较大,使用频率较高,在数据推送服务中单独实现。页面通知数据则是一些使用率相对较低、处理过程较统一的数据,根据用户推送数据。
本文针对车辆管理系统中的设计,通过前台Spring整合Hibernate以Web的方式,对数据库进行增删改查操作以及对后台基础服务的设计基本实现了车辆管理系统的对车辆的GPS定位,车辆报警的推送和指令信息的下发功能。本文首先提出了系统中所用到的一些基本技术,然后分别针对前台页面和整体框架的设计,最后再通过设计后台基础支撑服务,来使系统正常流转。
[1]张烨,王伯槐.基于Struts+Spring+Hibernate的高校学生管理系统的设计与实现[J].电子设计工程,2011(11):125.
[2]卢磊,张峰.基于J2EE的高校资产管理系统的设计与实现[J].电子设计工程,2011(2):92.
[3]杨斐,张峰.基于J2EE的无纸化考试试卷分析系统的设计与实现[J].电子设计工程,2011(16):20.
[4]陆洲.Java EE核心模式研究[J].计算机与数字工程,2014(1):81-84.
[5]薛峰,梁锋,徐书勋,等.基于Spring MVC框架的Web研究与应用[J].合肥工业大学学报:自然科学版,2012(3):337-340.
[6]刘川来,周培培,崔振科.汽车租赁智能管理系统的设计与实现[J].青岛科技大学学报:自然科学版,2014(1):82-85,89.
[7]李云云.浅析B/S和C/S体系结构[J].科学之友,2011(1):6-8.
[8]刘冰如.一种采用GPRS无线网络的车辆监控管理系统设计[D].哈尔滨:哈尔滨理工大学,2015.
[9]万仁保.基于GPRS与GPS技术的部队车辆管理系统的设计[J].科技广场,2014(8):45-50.
[10]陈少杰,陈贤富.基于GPS/GIS的出租车调度系统的设计与实现[J].电子技术,2011(6):28-30.
[11]侯忠辉.基于GPS/GPRS/GIS平台的消防GPS车辆管理系统构建[J].计算机与现代化,2013(1):158-160,164.
[12]李强.企业车辆综合信息管理系统的设计与实现[J].数字技术与应用,2016(7):173,175.
[13]陈恩东.基于北斗卫星导航系统的车辆管理软件的设计与实现[D].成都:电子科技大学,2012.
[14]孔德为.基于WEB的物流企业车辆管理系统分析设计与开发[D].吉林:吉林大学,2012.
[15]秦卫.基于Web的车辆管理系统的设计与实现[D].成都:电子科技大学,2012.
[16]温宗周,陈改霞.基于GPS/GPRS的远程车辆管理系统的设计[J].电子测量技术,2013(8):76-79.
Design of vehicle management system based on J2EE application
WANG Xi-wei1,ZHANG Jin-song2
(1.Wuhan Research Institute of Post&Telecommunications,Wuhan430074,China;2.Wuhan YCIG iLink Technology Co.,Ltd,Wuhan430074,China)
In order to manager all vehicles of the group company,proposed a design schema of vehicle managerment system based on J2EE application and finished a detail design.The design of foreground system is mainly used Spring MVC design pattern and used Spring integrate Hibernate framework,make system can track the GPS and alarm information of vehicles and send instruction to vehicles,it can control vehicle more easily.
Spring MVC;Hibernate;Java EE;GPS information
TN99
A
1674-6236(2017)23-0030-05
2016-11-15稿件编号:201611114
王熹玮(1993—),男,江西萍乡人,硕士。研究方向:互联网技术。