软件体系架构模式在J2EE中的运用_第1页
软件体系架构模式在J2EE中的运用_第2页
已阅读5页,还剩11页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件体系架构模式在J2EE中的应用层体系架构模式层(layer)体系架构模式就是把应用系统分解成子任务组,其中每个子任务组处于一个特定的抽象层次上。1.1概述层架构模式组织成一个层次结构,每一层为上层服务(ServiceProvider),同时也作为下层的客户端。在一些层次系统中,除了包含一些输出函数外,内部的层只对相邻的层可见。这样的系统中构件在一些层实现了虚拟机(在另一些层次系统中层是部分不透明的)机制。层的调用通过决定层间如何交互的协议来定义。这种风格支持基于可增加抽象层的设计。这样,允许将一个复杂问题分解成一个层堆栈的实现。由于每一层最多只影响两层,同时只要给相邻层提供接口,允许每层用

2、不同的方法实现,因此为软件重用提供了强大的支持。1.2问题层结构是最成熟的软件体系架构模式,它起源于早期的系统设计,由开始的函数调用,作为函数库,供其他程序进行调用一般在系统设计时,由一系列高层模块和底层模块处理构成,并且高层的模块依赖于底层.因此为了完成系统的设计必须要考虑一下因素:*源码的修改会影响整个系统,应该被限定在一个部件内部而不影响其他模块*接口应当稳定,甚至要被规范化*系统的架构应该灵活,可以更换*系统的开发需要被划分为多个部分,比如团队开发或者异地开发1.3模式结构从系统高层的观点来看设计方案比较简单,它把系统进行分为几个层次并且把它们叠加起来最下面的抽象层称为第一层,它是系统

3、基础依次类推,把n层放在第n-1层上.其结构如下图:ZAir.'Kis1.4非软件描述层模式在现实生活中很常见特别在中国的封建社会的等级森严的制度下,把人分为几个等级,其实就是分层,上层可以指示下层不过现在有的企业管理制度,与这种管理理念相适应的管理体制是垂直的自上而下的泛官僚体制结构。其结构设置表现为自上而下的单向层级制,这种结构有利于政令的传达和执行,保证管理的效率,但是官僚特性也很明显如下图:层模式在现代物流也很常见,如下图的,在自行车在运输的过程,首先在自行车厂进行出厂有人员进行打包,然后进行装运,最后再有相应的分销商,进行组装销售1.5优点与缺点层架构模式是最常用的一种软件体

4、系架构模式。模式具有以下优点和缺点:从它的实现和结构图中,我们可以得出,该1.5.1 优点层次的复用性如果每个层次有很好的抽象接口,那么它可以被其他环境复用支持基于抽象程度递增的系统设计,使设计者可以把一个复杂系统按递增的步骤进行分解,使系统更容易模块化支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多影响相邻的上下层*可替换性因为独立的层次设计很容易被功能相同的模块替换但是在实际的项目中,该模式也有相应的不足1.5.2缺点低效率分层结构通常要比单层结构的效率低.因为有时高层过分依赖底层的服务因此必须穿过许多中间层进行数据的传送,甚至多次.改变行为的连锁反映层架构模式在J2EE

5、中的应用2.1 J2EE层架构模式的背景也许下图大家都比较熟悉,它介绍了软件从两层体系架构方式到三层的架构模式由于2层的架构方式,存在以下几点缺点软件部署开销很大每个客户端数据库驱动都需要进行安装和设置,一但程序发生改变,就需要重新部署,这意味巨大的开销*改变数据结构的开销很大客户端应用程序一般通过JDBC,ODBC,AD等直接访问数据库,这表明客户程序直接与底层数据结构交互。如果改变数据结构来处理新的过程,就需要重新部署每个客户端。改变数据库的类型的开销很大由于客户端直接使用特定数据库的API,和特定的存输过程,触发器等,因此数据库类型的改变,会引起很多的修改。但是通过把业务逻辑从存储过程和

6、本地的业务逻辑进行分离,独立为一层,这样就是应用层架构模式最经典的应用之一22J2ee应用的概述J2EE平台为设计、开发、集成和部署企业应用提供基于组件的方法。这种方法不但能降低成本,还能对整个设计和实施过程进行快速跟踪。J2EE平台能提供多层分布式应用模型,能重用组件,能为用户提供统一安全模型和灵活的事务处理控制。在J2EE规范中进行了以下的分层:应用客户端组件 Servlets和JavaServerPages(JSP)组件(也称为Web组件)* EnterpriseJavaBeans组件2.3ArchitectureandtheCube软件体系架构研究者,把软件系统架构进行总结和分析,提出

7、了Architecturecube理论.它把一个软件系统架构进行分解成三维进行分析,分别从Tier,layer,capabilities角度进行考虑TiersClientRt?>ur?eMndgenbiihvRehahlHySecurity;32Buhe阳jjIAplicatipficapabilities|VirtmilHitfcon,IIUpperAatfomrtp站wludtPlaMonn"-Ayger_PhTbjrm_;,-LowerPlntfnmi|1$.:ILmwWFarr-jrif其中Tiers定义为:Alogicalorphysicalorganizationo

8、fcomponentsintoanorderedchainofserviceprovidersandconsumers.Componentswithinatiertypicallyconsumetheservicesofthoseinan"adjacent"providertierandprovideservicestooneormore"adjacent"consumertiers.Withinatier,servicesaregroupedtolikerequirements,suchasfunctionality,security,orloaddi

9、stribution.Layers定义为:Thehardwareandsoftwarestackthathostsserviceswithinagiventier.Physical,network,andsoftwareplatformsandstandardAPIsetssupportthecomponentsthatprovideaservice.Layers,liketiers,representawell-orderedrelationshipacrossboundariesthataremediatedbyinterfaces.Whereastiersrepresentprocess

10、ingchainsacrosscomponents,layersrepresentcontainer/componentrelationshipsinimplementationanddeploymentofservices.SystemicQualities定义:Thestrategies,tools,andpracticesthatdelivertherequisiteQoS(suchasavailability,scalability,security,andmanageability)acrossthetiersandlayers.大家都知道,再考虑评价一个软件体系架构是否先进时,我们

11、经常要从”非功能属性”的角度去评审.我们首先进行区分功能属性和非功能属性的区别功能属性(functionproperty)用来描述整个系统的功能特性(feature),并且通常与特定的功能需求相关.功能特性可以通过特定的功能使用户可以直接看到的应用功能,可以通过实现来进行描述.非功能属性(non-functionproperty)定义为解决一个软件系统的可靠性,兼容性,性能,易用性,可维护性等.我们的开发者过去习惯于专心提供功能属性,然而今天,非功能属性变得越来越来重要在实际系统架构上,可能是每一个Tier上由不同的layer组成,或者说每一个layer都涉及不同的Tier,组成一个交错的系统

12、,并且Capabilities又和这两者交织,如下图:IIApplicationXVirtualPratfom1!ComponentsUpperPlatform=fivioninet:.wr“aDchcabcn诞n,wrLowrRalfoririIwqiingCStnf伽PresciilalicflTierIBEcxaTtirHndef5JCompo5dE-6PruvnfesczntrntirirMi辆htiIkiIhim日nbusilw»in站白询Milfonm占E”Inr&grsiionTiefnvtegrariraitWLFlT*er2.4J2EE架构的Cube241T

13、iers241.1 概述如果按照Cube理论把J2EE进行分析,从它的Ties层的角度进行考虑,把它分为以下几个Tiers:客户端层,表示层,业务逻辑,集成层,资源层.每层都是按系统中业务逻辑而划分的,它具有唯一的职责。每层与相邻层都是松散耦合的。还可以把整个系统表示为层的堆栈。喜尸喘呆应定程.声濡户端,邛门毫,直口GUI用户接口.按悴果我示展Tfrfi,寮泌fti离2:工(通过JDBCRMI,W7U与数第库客户端层该层代表访问系统的人员,应用程序,或系统的客户端。它是整个系统的对外接口,可以是Web浏览器(IE),Java应用程序(Swing),JavaApplet,WAP,其他设备或者是批

14、处理程序。V疑逹撓«表示层该层封装了用来服务访问本系统的所有客户端的表示层逻辑。该层解释客户端的请求,提供单次登录,实现会话管理,控制对业务的访问(权限检查),构造客户端的回复(response),以及把回复传递给客户端。一般Sevlet,JSP驻留在该层。业务逻辑层该层提供业务服务,包括业务数据和业务逻辑。通常应用程序的大多数业务处理集中在本层。同时它管理事务。EJB驻留在该层。该层负责与外部系统和外部资源通信,等资源层该层包括业务数据源和外部系统资源,集成层它有多种方式,如与数据库连接使用的JDBC如Oracle数据库,JMSserver,其他遗留系统等241.2 实现在实现上面

15、的Tier时一般我还需要结合实际情况进行分解,如果大家对熟悉,可以了解到web层我们使用MVC莫式,当然结合Filter,FrontControl,ViewHelp等模式,客户一般访问JSP(为了进行表示和业务的分离大多使用Taglib),然后由Control层进行处理,如果需要进行复杂的业务逻辑处理并且已经有后台实现(如EJB等),推荐经过BusinessDelegate层,模式请参见。口<1h*VitwCentro1ta访问后端业务逻辑(BP),一般业务逻辑使用Facade模式进行封装成统一的接口,业务逻辑层实现复杂的事务处理,如果需要访问资源层,再经过DAOB访问资源(目前多数是R

16、DBMS有时是遗留系统如Coraba,JMS,WebService,SAP等).具体见下图:关于InterceptingFilter,FrontController,ViewHelper,BusinessDelegate,Facade2.4.2 Layers 概述在开发J2EE应用时,我们一般把它纵向分为以下几个层,最下层为OS,JVM,network,层,它们负责系统的底层操作和网络数据的传输,一般我们开发人员不用关心运行在什么具体操作系统上,什么样的网络环境下.它的上层为J2EE服务层,一般由J2EE服务器(如WebSphere,WebLogic等)提供各种基础服务,如事务的

17、管理(JTS),命名目录服务(JNDI),负载均衡(LoadBalancing),容错(failover),安全(security)等,其次是通用业务层,它一般完成与具体业务无关的基本操作,包括如基础的框架(Framework),commons组件,如通用的数据库处理组件,系统错误处理组件,字符处理和数值处理组件,日志(log)处理,数据转化和编码维护等核心层最上层才是我们的具体业务逻辑模块,它完成具体的业务逻辑具体见下图:F1T血*口rk/Unh"DtisSif-ice/CcrtipcftE;llSTCP/OGJX242.2 实现结合J2EE实际环境,最底层一般不需开发人员关心的操

18、作系统和网络环境,并且不同J2EE服务厂商都提供了相应J2EE所必须得基础服务层,我们开发人员一般只需关心上面两层的实现,应用服务层经常使用类似于struts,webwork,waf等的webapplicationframework,log服务一般选择Imonslog等,其他具体的数据处理,数据的转化等操作我们需要进行开发,不过这些一般与具体项目无关,可以在公司内部不同的项目之间共享其实JakartaCommons提供的功能一般可以使用在该层.最上层才是我们的具体业务模块见下图:救的避LogsecurityFrameworkJMSEJBJTAJNDI等OSHttpHttps2.5层模式实现讨论

19、1. 为把任务分组成层而定义抽象准则。2. 根据抽象准则定义抽象层数。3. 给每个层命名并指定它们的任务。4. 指定服务5. 细化分层6. 为每个层指定一个接口。7. 构建独立层。8. 指定相邻层间的通信(或者调用)Petstore的层架构模式3.1 PetStore概述PetStore是Sun公司在J2EE平台上开发的一个应用样例,是Java软件在J2EE的蓝图程序,它示范了如何利用J2EE1.3平台的性能去开发灵活、可升级的分布式平台企业应用系统。PetStore是一个运行在Web上的,为网络客户提供宠物信息浏览、网上订单和管理等功能的网上宠物店,在技术上使用了J2EE中的大部分企业组件和

20、优秀的设计模式,提供了一套有高灵活性扩展性和可升级的完善J2EE开发框架.jJavaPetStorePetStore共有4个子系统组成:* petstoreWebSite该部分是petstore中的核心,客户登录系统进行选择,定购,提交定单等。* petstoreadmin该部分是系统的管理功能* Orderprocessingcenter定单调度中心,对客户提交的定单进行处理* PetStoresupplier为产品供应者提供的维护画面在这里主要以WebSite为主进行分析(以下petstore均指该子系统),它是怎样进行分层处理的.3.2 Petstore体系架构我们按照层的架构模式进行分

21、析,主要从Tiers和layer角度进行考虑.3.2.1 Layer层321.1 概述PetStore是基于Web应用系统,它的客户端使用Broswer,然后是Web层的应用,业务逻辑层(由EJB实现),资源管理层(包括数据库,JMS,JavaMail等).具体又细分为以下几层.ClientClientJSP(T«litiKTKLActionTCCEJBActionejbOmajms.jairaMai 客户请求浏览页面,一般Web层的View由JSP组成,并且使用了大量Taglib* 把每个请求映射到某个HTMLAction类,来响应它.HTMLAction类是一个标准的类,执行选择

22、的HTMLAction«WCC是由WebClientController完成(实现类为WebClientControllerlmpl),它实际是SUN核心模式的BusinessDelegate层«ECC是EJBClientController,它实际是核心模式SessionFacade* EjbAction层执行EJBAction,传送event参数进来.EJBAction读event里面的参数,并且操纵EJB或者别的数据源来执行相应的商业操作 业务集成层,由通过DAO,EntityBean,JMS等访问相应的资源具体的详细的结构如下:CllfrrflRvukbIFilte

23、rMaptoHTULAclion|Ni>evprt|£1讣EIC!ipDn3CEincuicfHTITLAcilcn、"百口EFIGJHEvaniView321.2实现在Web!它应用了著名的MV(模式,V由JSP来实现,为了业务逻辑和表示的分离一般结合JSPTagLib.它把请求提交到相应的处理MainServelet,然后准发到RequestProcessor,他根据读取mappings.xml,的配置信息,生成相应的处理类Action如com.sun.j2ee.blueprints.petstore.controller.web.actions.CreateUs

24、erHTMLAction每个Action一般包括以下几种方法(doStart,perform,doEnd),如果perform只需对请求的处理,如果处理的结果不需调用EJB的业务逻辑,只需返回即可,否则把请求组织成相应的Event,通过WC转发到后台的业务逻辑层.代码见下:publicvoidprocessRequest(HttpServletRequestrequest)throwsHTMLActionException,EventException,ServletExceptionEventev=null;StringfullURL=request.getRequestURI();/get

25、thescreennameStringselectedURL=null;ServiceLocatorsl=(ServiceLocator)request.getSession().getAttribute(WebKeys.SERVICE_LOCATOR);WebClientControllerwcc=sl.getWebClientController();HTMLActionaction=getAction(selectedURL);if(action!=null)action.setServletContext(context);action.doStart(request);ev=acti

26、on.perform(request);EventResponseeventResponse=null;if(ev!=null)eventResponse=wcc.handleEvent(ev);action.doEnd(request,eventResponse);通过WC(把Event转发到EC,这里WC是delegeteBussiness层publicclassWebClientControllerlmplimplementsWebClientControllerpublicsynchronizedEventResponsehandleEvent(Eventev)throwsEventE

27、xceptionreturnccEcessEvent(ev);EC是Facade层,女口下,publicclassEJBClientControllerEJBimplementsSessionBeanprotectedStateMachinesm;publicEventResponseprocessEvent(Eventev)throwsEventExceptionreturn(cessEvent(ev);然后根据相应的Event的类型使用不同EJBAction来完成相应的业务逻辑publicEventResponseprocessEvent(Eventev)throw

28、sEventExceptionStringeventName=ev.getEventName();StringactionName=null;EventResponseresponse=nuII;if(eventName!=nuII)actionName=getActionName(eventName);EJBActionaction=null;action=(EJBAction)Class.forName(actionName).newlnstance();if(action!=null)action.init(this);/dothemagicaction.doStart();respon

29、se=action.perform(ev);action.doEnd();returnresponse;每个具体的EJBAction完成自己的具体的业物逻辑,如果处理数据对象,则使用的相应的实体对象(datamodule).具体的层次调用过程,见下图:*WEBTIER<wc业务层层CrMUtlwMTRILJUUm一-EJBHEft-*CMieUw3.2.2Tier层322.1概述PetStoreLayer的设计分为以下几层,最底层为操作系统和网络服务,然后是基于J2EE服务器提供的系统服务层,上面是framework,Component层,包括WebApplicationFrameWor

30、k,以及commons业务逻辑,工具类等组成.最上层才是具体的业务实现模块具体见下图:$lrtAppllcalianAnpi/crtLotcW«kjH炉刿祀却io*卜r/rewa+kjPphftUplQCtW?LT03F?口pRMMtflh'arr#eWwComporiQiiUWcjj.'nfjfLogic却口W",JZEE$冲MeS<n3rw3.222实现Petstore主要开发了两层,其中业务核心层,主要有几部分* WAF(WebApplicationFramework)* ApplicationControl和Presentation(主要指JSPTagLib)* Components(如各种实体对象如customer,Account,等)* BusinessLogicData各种常用的工具类层的业务逻辑包括以下几个部分:登录和注册,购物车模块,登录模块等我们以WAF为例介绍业务共同层的作用,开

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论