1、。SOA-SSH分层架构的设计与应用1 基于SSH架构的应用开发框架系统基于轻量级J2EE软件SSH架构,由Struts、Spring、Hibernate根据其各自的应用特性而进行整合而成,选择以Spring框架为核心并整合Struts和Hibernate的框架组合。SSH组合框架如图所示,包括表现层、业务逻辑层和数据持久层。系统采用可重用的、成熟稳定的SSH框架可以构建健壮的、可重用的、可扩充的、易维护的Web应用程序。Struts框架是基于MVC模式的Web框架。MVC设计模式是由模型(Model),视图(View)和控制器(Controller)3个部分组成,而Struts是一个免费的开
2、源Web层应用框架,具有很高的可配置性。Spring框架提供了一种轻量级的企业业务解决方案,用于建立“快速装配式企业组件”。在此基础上,Spring还提供了包括声明式事务管理,RMI或Web Services远程访问业务逻辑,以及可以多种方法进行的持久化数据库的解决方案。Hibernate框架是一个优秀的开放源代码的JAVA对象持久层轻量级框架。它的工作原理是通过配置文件把JAVA域对象和数据库表之间建立起一个映射关系,这样,只需要通过操作这些域对象达到操作数据库的目的。通过3种框架优化组合实现系统分层解耦,一方面有利于项目组各角色的明确分工,提高开发效率,缩短系统开发周期;另一方面使系统具有
3、良好的扩展能力和可维护性。页面表现层页面层由Struts实现,Struts是基于MVC模型的框架。MVC模型将一个Web应用分割成为模型(Model)、视图(View)和控制器(Controller)三个部件,这三个部件既相互独立又能协同工作,通用的控制组件ActionServlet接收来自客户端的HTTP请求,根据Struts-config.xml配置文件,把请求转发给相应的Action对象,然后Action类实现业务逻辑和动作处理,通过流程跳转将处理结果返回给客户端业务逻辑层由Spring实现业务组件的组装关联与管理,Spring是个流行的轻量级容器,是一个开源的并且普遍兼容的非强制性的框
4、架。它通过IoC (Inversion of Control,又称DI,Dependency Injection)、AOP(Aspect-Oriented Programming)的应用、使用面向接口的编程最大限度地降低业务组件之间的耦合度,增强系统兼容性和可扩展性。数据持久层借助开源框架Hibernate对JDBC进行轻量级的对象封装,将数据库表与对象进行关联,实现数据库访问性能优化和与数据库交互的常用操作CRUD。Hibernate封装了数据库访问、事务管理、数据缓存等工作,可以大大提供开发效率。 将这三种技术有机结合起来构建的SSH技术框架,不但可以有效提高系统开发效率,而且在系统安全性
5、、稳定性和健壮性上都有良好的改进。域对象在各个层之间移动,为表示层提供所需要的数据源,为持久层提供对象,使得各个层以一种松散耦合的方式彼此作用而无需考虑低层的技术细节,进而构建出一个完整的Web开发框架。2 SSH架构分层实现数据持久层的搭建持久层Persistence主要完成数据的访问,它操作底层的数据库表,使用DAO组件封装具体的操作细节,为业务层提供接口,使业务逻辑与数据持久化分离。在Hibernate中,通过配置相应的XML文件(*.hbm.xml)来完成对象与表、对象属性与表字段的“O/R映射”关系。Hibernate运行时,会自动读取XML映射文件,然后按照该文件指定的规则动态构建
6、Java类,以便管理数据在数据库与Java程序之间的转换。持久层的访问通过DAO组件完成,下面以渠道组织机构信息表(Dchngroupmsg)为例介绍DAO组件建立的过程。SSH为Struts+Spring+Hibernate的组成方式,Struts实现MVC,Spring负责架构的结合,Hibernate进行数据的持久化。通常其分层开发的结构图(以一个业务新增为例)如下:这样的结构,满足了一般的业务需要,但是对于当前日益复杂化的WEB2.0的开发,却存在不少问题,归纳起来主要有以下几点的不足:A)DAO和服务层容易出现职责不明,由于按照MVC逻辑,业务代码应该写在Struts Action里
7、,但是其事务的提供,却是配置在Service层。为了一组在逻辑上完整的数据操作业务逻辑,需要涉及两个层(Serveice、 Action)来进行编写,遇到判断的情况下,为了保证完整的事务操作,则需要将业务代码移到Service层完成,而通常习惯了在Struts Action里调用多次Service而产生多个事务而在出现Exception时导致出错时操作之前调用的Service事务的业务数据没有回滚。B)当需要返回的数据供AJAX使用,操作JSON或XML的的大量使用时。开发起来会很费力,一段同样的业务代码,为了使用AJAX和XML可能需要重新编写一次,或者在同一个ACTION里通过标志来判断,
8、对分层结构造成了比较糟糕的破坏。如果设计得不好,为了使用JSON和XML还得额外增加大量的配置,严重降低了开发效率。因此,为了克服这些缺点,本人对于SSH架构,进行了实现了重新的分层,共享了业务代码。简化了开发、增强了与AJAX技术、MXL技术的结合。提供了一种更高效的开发模式。本架构的优点,由于业务代码统一实现IbusinessService接口,使得只需要相对固定的几个 Struts Action类调用Service层的方法,便可以完成工作。包括JSON格式输出,XML输出及WebService输出均调用Service层方法来完成功能。这样便实现了业务代码的分离,以及与前端框架的极大解耦。
9、3 分层架构设计结合上面对SOA和J2EE开发中基于SSH的分层架构的分析,提出了SOA-SSH分层架构。这个架构是基于SOA的,也是基于J2EE的,所以这个架构同时含有了二者的特征。J2EE体系中,通常采用EJB组件或Spring来实现业务逻辑层,而在SOA系统中业务是基于服务的,于是这个架构中采用把业务逻辑层的组件包装成Web Service的方式,使用Web Service作为SOA的服务提供者,Spring作为服务的实现,同时使用企业服务总线(ESB)技术来实现SOA中的服务中介,并且在J2EE体系的业务层之下添加了一个服务代理层,用来封装对服务的具体调用代码。架构采用ESB担当SOA
10、服务注册中心的角色,使用ESB能够实现异构系统的集成。SOA-SSH分层架构如图所示。 架构中有关部分的说明:表示层:JSP/Html/JavaApplet是表示层的实现技术,用来生成Web页面。用户通过浏览器来访问Web页面。Struts中Servlet Control是控制器部分,负责页面层和内部业务的结合,以及页面之间的切换。通常情况下在Web.xml文件中配置。服务代理层:服务的请求处理程序,用来与服务交互,从而向系统内增加、更新和查询信息,通常由一组java类组成。编写服务调用代码时需从服务总线获得服务的WSDL描述文件,然后根据此文件进行编写。ESB企业服务总线:服务请求者和服务提
11、供者之间的中间层,对服务进行集中管理。在ESB中的具体工作:客户端向服务总线发送请求消息时,首先发到了代理服务,代理服务收到服务请求后,经过一系列的消息处理发送给业务服务,由它进一步转给外部的服务提供者。服务层:Web Service是服务的提供者,由无状态会话bean生成,通常是粗粒度的,对应企业的业务逻辑。业务组件层:负责实现业务逻辑的J2EE组件。由Spring或EJB完成业务构件的开发。持久化组件:企业应用和关系数据库之间的中间件,优秀的ORM工具。业务数据在内存中表现为对象,在关系数据库中则表现为关系数据,把对象持久化到关系数据库中,需要进行对象一关系映射(ObjectRelatio
12、nMapping,简称ORM)。数据库层:关系型数据库,存储企业数据。4 企业服务总线ESB企业服务总线(ESB),是由中间件技术实现并支持的面向服务架构(SOA)的一组基础架构功能,支持异构环境中的服务、消息以及基于事件的交互,并且具有适当的服务级别的可管理性。ESB具有轻量级的分布部署模型,通过对服务的注册、发布、流程化等一系列的管理,提供服务仓库,并可以将服务仓库中来自各系统的服务根据业务需求有机的结合起来,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。有了ESB,SOA才能释放它的最大价值。ESB提供了智能的消息代理、动态传送和转换,所有这些都支持与服务生命周期管理功能(包括服务注册、监控和定义闭值的服务水平协议(Server Level Agreement,SLA)实施)集成的异构服务端点ALSB为IT提供了一个理想的SOA基础,可以实现下列目标:通过动态配置异构共享服务之间的集成来节省时间;通过简单的集中式服务注册来减少维护工作;通过经济有效的服务部署和自动配置来降低成本。THANKS !致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求欢迎您的下载,资料仅供参考-可编辑修改-