系统架构系统架构系统架构系统架构设计设计设计设计说明书说明书说明书说明书版本号版本号版本号版本号::::VVVV0.10.10.10.12010年7月1.目的本说明书的编写目的是描述系统的架构设计方案,包括系统的软件总体架构设计及使用的框架说明,以及基于该架构的开发流程,并作为指导开发人员、测试人员进行系统开发及测试的依据。2.系统架构设计整个软件架构方案采用分层、分布式的部署结构,明确地分离了表现层和业务逻辑,能够保证应用服务逻辑的一致性和稳定性、结构的开放性、功能的可扩展性和可维护性、开发的可并行性,同时采用一些开源的框架,兼顾了经济性。框架是一种特殊的软件,它为软件开发带来了高度的重用性,是无数软件开发人员的多年项目开发经验的总结。在一个优秀的框架上开发应用,而不是从零开始,可以大量缩短项目的开发周期、降低开发风险、增强应用系统的稳定性。系统总体架构图系统总体架构图系统总体架构图系统总体架构图系统总体架构如上图所示,按功能可以分为P4P视频传输服务、CDN视频分发服务、NMS网络监控服务、内容管理系统(CMS)、业务运行支持系统(BOSS)、电子节目单发布系统(EPG);系统根据功能特点与业务需求采用C/S和B/S两种架构模式,其中,P4P视频传输服务采用XBT开源项目,XBT项目基于纯C++代码实现,可以运行于Linux和Windows平台,支持UPNP和NAT穿透;CDN视频分发基于FTP协议实现视频文件的分发传输;NMS网络监控服务采用OpenNMS开源项目,OpenNMS是基于开源协议开发的企业级网络管理系统,支持Linux和Windows平台。支持SNMP网络管理协议确保管理的扩展性,可以监控各个终端及服务器的故障及资源使用状况,并以图形化的方式展现出来;数据库操作系统LINUXORACLECDN视频分发服务CMSBOSSEPGWEB应用服务器表示层JSPStrutsExt用户层STB客户端WEB浏览器(IE)业务层BLOSpring数据访问层DAOHibernateP4P视频传输服务JDBCJDBCDTODTODTODTO视频游戏第三方平台NMS网络监控服务视频内容管理系统(CMS)、业务运行支持系统(BOSS)与电子节目单发布系统(EPG)采用基于WEB的B/S结构,技术架构采用J2EE标准的多层架构,基于并且集成Ext、Struts、Spring、Hibernate开源框架,以后称为WEB子系统。3.WEB子系统架构设计DAOiBatisJBOSSServerWeb服务器数据库ApacheServer表示层Struts+ExtJSPActionFormAction业务层数据访问层OracleDTODTODTODTOJDBCJDBC操作系统RedHatLinux用户层Web浏览器(IE、FireFox)BLOSpringDAOHibernate从架构图中可以看出系统分为四层:•用户层:浏览器•表示层:借助Struts及Ext实现•业务层:借助Spring进行业务组件的组装关联。•数据持久层:借助Hibernate实现为什么采用这样的四层架构?•通过成熟的开源产品实现各层,同自己编写代码实现,相比之下能缩短开发周期,且架构所用到的开源产品均有很广泛的用户群,经受过实践的考验,质量和性能更有保障。•层与层之间松散耦合,增加代码重用率。•各层分工明确,这样也利于团队的明确分工。系统的总体架构从结构上分为用户层、表示层、业务层、数据访问层以及在层间传递数据的数据传输对象。下面针对各层加以描述。1).用户层用户层作为客户端程序,用来与用户交互,并把来自系统的信息显示给用户。系统的用户层采用的是IE浏览器作为交互方式。2).表示层表示层主要控制页面外观,产生页面逻辑以及对用户输入的数据进行合法性验证。系统中主要包括基于EXT框架的JavaScript脚本及基于Struts框架的JSP、Action、ActionForm。其中JavaScript脚本可以增强用户体验,JSP负责视图的功能,由HTML、Java程序片断和JSP标签构成;ActionFormBean用于在视图组件和控制器组件之间传递HTML表单数据,通常每个HTML表单对应一个ActionFormBean,HTML表单中的字段和ActionFormBean中的属性一一对应。ActionForm的validate()方法用于对用户输入的数据进行合法性验证;Action负责单个事件的流程控制。3).业务层业务层处理应用的核心业务逻辑。业务逻辑对象BLO(BusinessLogicObject)把业务规则、约束、活动和数据结合在一起,Spring负责对这些业务对象的管理。4).数据访问层数据访问对象(DataAccessObject)把底层的数据访问操作和上层的商务逻辑分开。5).数据传输对象(DataTransferObject)数据传输对象通常作为各业务实体的JAVABEAN对象,负责层与层之间数据的传输。目录结构及包设计目录结构及包设计目录结构及包设计目录结构及包设计J2EE规范定义了Web应用程序的类和文件存放的目录结构。该层次结构由三个层次构成。第一层是上下文,它是一个目录或者是多个目录,用来查找与客户请求关联的Web应用程序。在上下文中存在一个/WEB-INF目录,该目录标记着另一个层次,它包含一个子目录,帮助组织类文件和压缩的包文件。/WEB-INF还包含一个映射所有文档并定义整个应用程序特性的文档。最后一层直接位于上下文中,包含所有客户端可见的文件,包括用户界面文件、图形和音频文件。表1-1系统目录结构表目录名说明/root应用上下文根目录/cssCss样式表文件目录/img图片文件目录/jsJavaScript文件目录/cmsjsp文件目录/web-inf/conf配置文件目录/lib压缩的java类文件,组件的JAR文件/classes本系统的java类文件/tldTag库文件web.xml部署描述符文件classes目录下的系统的java文件的包结构说明见表1-2。表1-2CMS系统包结构说明表包名作用说明com.gecai.base基础架构com.gecai.base.web基础架构的表示层com.gecai.base.web.action基础架构的表示层的Action类com.gecai.base.web.form基础架构的表示层的Form类com.gecai.base.service基础架构的业务层com.gecai.base.service.impl基础架构的业务层的实现类com.gecai.base.hibernate基础架构的数据访问层com.gecai.base.hibernate.pojo基础架构的数据访问层的数据对象类com.gecai.base.common基础架构的共同类包com.gecai.cmsCMS子系统com.gecai.cms.webCMS子系统的表示层com.gecai.cms.web.actionCMS子系统的表示层的Action类com.gecai.cms.web.formCMS子系统的表示层的Form类com.gecai.cms.serviceCMS子系统的业务层com.gecai.cms.service.implCMS子系统的业务层的实现类com.gecai.cms.hibernateCMS子系统的数据访问层com.gecai.cms.hibernate.pojoCMS子系统的数据访问层的数据对象类4.WEB子系统架构总体功能设计4.1Struts框架Struts是一个实现了MVC模式的框架,对Model、View和Controller都提供了对应的实现组件。可分为1.x和2.x两大版本,如下图所示:1.控制器(Controller)控制器的作用是从客户端接受请求,并且选择执行相应的业务逻辑,然后把响应结果送回到客户端。在Struts1中Controller功能由图中ActionServlet和ActionMapping对象构成:核心是一个Servlet类型的对象ActionServlet,它用来接受客户端的请求。ActionServlet包括一组基于配置的ActionMapping对象,每个ActionMapping对象实现了一个请求到一个具体的Action处理器对象之间的映射;在Struts2中Controller为基于事务拦截的拦截器,针对每次客户端请求Action进行拦截分发。2.模型(Model)MVC系统中的Model部分从概念上可以分为两类--系统的内部状态,和改变系统状态的动作。Struts1为Model部分提供了Action和ActionForm对象:所有的Action处理器对象都是开发者从Struts的Action类派生的子类。Action处理器对象封装了具体的Struts配置文件ControllerModelActionViewJSPBrower处理逻辑,调用业务逻辑模块,并且把响应提交到合适的View组件以产生响应。Struts提供的ActionForm组件对象,它可以通过定义属性描述客户端表单数据。开发者可以从它派生子类对象,利用它并结合Struts提供的自定义标记库,可以实现对客户端的表单数据的良好封装和支持,Action处理器对象可以直接对它进行读写,而不再需要和request、response对象进行数据交互。通过ActionForm组件对象实现了对View和Model之间交互的支持;Struts2的Action为ActionSupport基类的子类,由于对于每一个Action请求生成一个实例对象,不存在线程安全问题。3.视图(View)Struts应用中的View部分是通过JSP技术实现的。Struts提供了自定义的标记库可以使用,通过这些自定义标记可以非常好地和系统的Model部分交互,通过使用这些自定义标记创建的JSP表单,可以实现和Model部分中的ActionForm的映射,完成对用户数据的封装,同时这些自定义标记还提供了像模板定制等多种显示功能。4.2Spring框架Spring是一个轻量级的实现了控制反转(IoC)和面向切面(AOP)的容器框架,其组件包括:1.Core包Core包是框架的最基础部分,它提供依赖注入(DependencyInjection)特性来管理Bean容器功能。2.Context包Context包提供了框架的资源访问方式,如JNDI、资源装载等的接口。3.DAO包DAO包提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商的特有代码。该包也提供了实现编程性和声明性事务管理的方法。4.ORM包ORM包为流行的关系-对象映射APIs提供了集成层,包括JDO,Hibernate和iBatis。5.AOP包AOP包提供与AOP联盟兼容的面向方面编程实现,允许用户定义,如方法拦截器和切点,来从逻辑上把应该被分离的功能实现代码解耦。6.Web包Web包提供了基本的面向Web的特性。如MVC以及与其他Web框架的结合。Spring提供了一致的事务管理抽象。这个抽象是Spring最重要的抽象之一,它有如下的优点:•为不同的事务API提供一致的编程模型,如JTA、JDBC、Hibernate、iBatis数据库层和JDO。•提供比大多数事务API更简单的,易于使用的编程式事务管理API。•整合Spring数据访问抽象。•支持Spring声明式事务管理。Spring使应用开发者能够使用在任何环境下使用一致的编程模型,只写一次代码,就可以实现不同环境下的事务管理。Spring同时提供声明式和编程式事务管理。其中声明式事务管理仅通过一些配置就使得事务管理从业务逻辑分离出来,极大地减轻了开发人员的负担。4.3Hibernate框架Hibernate是一个实现了以ORM模式实现了持久层的框架,由于数据库的读写是一个很耗费时间和资源的操作,当大量用户同时直接访问数据库的时候,效率将非常低,如果将数据持久化就不需要每次从数据库读取数据