第1*j2EE设计模式 ·J2 EE Connector Architecture version1.0是个服务提供者接口,可以开发资源适配 器,访问企业信息系统。它定义」EE兼容服务器’j资榞适配器之间的系统级合约 JavaMail version12提供管理E-mai的API,要求有 JavaBeans Activation Framework (JAF)。 除了每个J2EE13兼容应用程序服务器都有的技术之外,还有其他JAX( Java aPl for XML)接口: JAXM-Java API for XML Messaging 提供的AP可以用 ebXML. org、 Oasis、w3C!TF定义的线路协议包装与传输业务事 JAX/RPC-Java API for XML-based Remote Procedure Calls 支持基于XML的RPC标准 °JAXR· Java API for XML Registries 提供一组分布式注册服务的AP,可以用 ebXML.org定义的协议实现业务企业之间的 企业对企业(B2B)集成 JAXB-Java API for XML Binding 可以将 XML Schema编译成一个或几个Java类,可以分析、产生和验证符合 Schema 的文档。 JWSDL -Java Web Service Definition Language 提供一组标准AP,表示和操纵Web服务描述语言(wSDL, Web Services Description Language)文档描述的服务。这些AP定义了构造与操纵服务描述的模型。 JAXP的新版本(12)正在开发之中。为了便于安装和使用这些AP,Su公司在 Java XML Pack( JAX Pack)中收集了下列技术:JAXM、 JAXP I.2、JAXR与 AX-RPC。Sum公司还发 布了 Java Web服务开发包( WSDP, Java Web Services Developer Pack),包括 iAva XML Pack. JSP Standard Tag Library (JSTL), Ant Build Tool. Java WSDP Registry Server. Web Application Deployment Tool和 Apache Tomcat dev容器。必须先熟悉这些AP之后再开 web服务和采用相关模式 除此之外,还有一些AP原先是可选补充的,现已加进2SE14中,成为J2EE14的一 部分。这些API包括: Java安全套接扩展(JSSE, Java Secure Socket Extension)可以用SSL与TLS协议进 行安全通信。JSSE包括加密、验证和验证消息完整性的功能 ·Java加密法扩展(JCE,Java graphy Extension)提供加密、密钥生成、密钥 协议和消息验证码(MAC, Message Authentication Code)算法的框架与实现 Java一般性安全服务( JGSS, Java Generic Security Services)是一般性验证与安全 消息接口的API,支持可插安全机制。 ·Java管理扩展(JMx, Java Management Extensions)是管理和监视的AP 要使用J2EE,就要学习所有标准J2EE技术,最好还要学习上述补充选项。这并不简单 但仅仅学习这些技术还不足以在2EE中设计良好的应用程序,因为这些技术只回答了如何使 用的问题,而没有回答何时使用和为何使用。学习这些技术也不同于学习在J2EE中设计应
实用J2EE设计模式编桯指南 科厅。设计应用稞序时,需要确定技术和体系结构 学习J2EE技朮是学习如何用J2EE设计应用程序的基础。 如果要成为成功的设计人员,就要知道更多的知识,包括 哪个问题用哪个技术 如何最佧利用,即每种技术的最佳用法 常见问魎及何时不能用某个技术 常见问题的最佳方案 如何改进不良方案 每个EE设计人员、建筑师和开发人员都要在使用J2EE技术时面对这些问题。小服务 JSP、EJB JND、JCA和其他』EE技术能够很好地为开发人员抽象技术细节,但我们 仍然需要知道其如何使用。要知道其如何使用,就要对基础概念进行深人研究,即J2EE如何 抽象和隐藏基础细节 过去,大量应用程序以锴误的方式使用J2EE技术,使应用程序性能不好,无法满足目 标与要求。说实话,这些问题不仅在J2EE中有,每种技术都可能因使用不当而建立无用的应 用程 尽管J2EE从高层抽象基础技术,但我们仍然要建模和设计方案,利用这些技术。J2EE 设计人员、建筑师和开发人员要寻找上述问题的答案,实际中可能更具体,例如 ·特定任务最适合哪种企业Bean 如何设计EJB以达到性能和仲缩性要求 如何充分利用容器管理事务、持久性和安全性 是否每次查找组件或存储引用 ·把会话数据存放在哪里 用JSP还是用小服务 ·是否分别处理内容与表示 谁负责数据验证 如何定义实体Bean之间的有效关系 如何减少远程方法调用 ·层之间要发送多少数据 如何集成现有应用程序 这些冋题是每天都要回答的。JEE设计模式开始回答这些问题。如今,JE模式有两大 来源,一个在TheServerSide.com模式仓库中,可以从htpJ/www.theserverside.com/patterns ndex. jsp联机访问,其中最重要的模式见( EB Design Patterns; Advanced Pattems, Processes and Idioms》-书, John Wiley&Sons出版(ISBN0471-208310) 个重要DE模式源是 Sun Java Center.,定义了15个HE模式,可以从hp/ developer Java. sun. com/ developer/technicalArticles/J2EE/ pattens联机访问,见《 Core J2 EE Pattem Prentice HallHl F(ISBN 0-13-064884-1)
第1章J2EE设计模式 J2EE中为何使用模式 J2EE中使用模式具有使用一般模式的所有好处和针对]EE开发的好处。因此,这些模 式针对J2EE,不像一般模式那么抽象,从而简化了特定系统和应用程序中的标识、使用适 正确使用J2EE模式可以改进应用程序设计。前面曾介绍过,我们要先了解模式之后 能使用模式。尽管模式初看起来很简单,但通常不那么容易采用,因此本书花大量篇幅演示 如何以最佳方式采用模式 J2EE模式建档设计与开发J2EE应用程序时所遇到的常见问题的最佳解决方案。这些方 案是经过实践证明的,已经多次使用,能够在不同项目中成功地解决类似问题 式gE模式定义了EE开发人员的共同词汇,使开发人员之间可以更好地交流。使用模 式的每个开发人员能够很快在与别的开发人员交流时使用模式名。 由此可见模式命名是非常重要的。尽管还没有」2EE模式的命名标准,但情况是不错的 只有几个几乎一致的模式采用不同名称。同一模式采用不同名称容易造成混乱,但这种情形 很快会得到解决。 使用模式还有另一个重要好处,即限制解的空间。模式定义了采用解决方案的边界 因此向开发人员提出了边界 J2EE特定模式与J2EE情境中的模式 我们已经介绍2EE设计模式的概念,那么,J2EE模式与通用设计模式有什么关系呢? 大多数通用设计模式也适用于2EE平台,称为J2EE情境中的模式。有些模式是J2EE特定模 式,解决]2EE特定问题,称为J2EE特定模式 将模式进行分类时,我们发现设计模式由一般到具体。根据其一般性,叮以将模式进 亍如下分类 ·基础设计模式,不与特定域、平台或编程语言相关联,如前面提到的四位专家定义 的 Facade是个基础设计模式 设计模式,与特定平台或编程语言相关联,是用特定平台或编程语言部分或完全实 现的(如Java、J2EE)。例如 Session and Message Facade、 EJB Command, Generic Attribute Access,等等。稍后将概要介绍J2EE模式。 ·设计模式,与特定域相关联,表示有限情境中问题的解,例如与事务、持久性、ES 集成等相关的模式。域模式可以直接从基础设计模式派生,也可以定义为特定平台 模式的规范 要确定模式是否特定平台或编程语言相关联,需要了解这个平台或编程语言。前面 曾介绍过,模式是用特定平台(JEE)或编程语言实现的成功方案,然后进行一般化。重要 的问题是一般化能香不用特定结构的平台或编程语言表示这个模式。 另一个标准是模式是香应用特定程序域,越不用程序特定域,模式使用范围就越 另一个条件是模式是否是原子的与基本的,或是由另外几个模式建成的。尽管这些分 析很有趣,供对模式应用并不重要,只是有助于更好地理解模式
实用J2E设计模式编程指南 回到2EE模式,可以看到EE模式中有针对2EE与Java的模式,也有J2EE平台中采用 的通用模式。有些J2EE模式是特定域,而有些则可以应用到不同域中。后面将会介绍,本书 根据技术域将]2EE模式进行分类,从而简化选择和应用。 图1.3显示了模式层次。 通用模式 域特定模式 语言和平台特定模式 域、语言和平台特定模式 图13 J2EE模式体现了Java设计人员、建筑师和开发人员的经验与智慧。下节简要介绍最重要 的J2EE模式。 最重要的J2EE模式 前面曾介绍过,J2EE有两大类重要J2EE模式,一类由 Sun Java Center管理,定义15种 模式,在《 Core J2 EE Patterns》书中发表,另一类是 TheServerSide. com,这种类发表了大 量模式,最重要的见《 EB Design Patterns: Advanced Patterns, Processes and Idioms》。 下面介绍这两类中的最重要模式。 Sun java Center J2EE模式类别 Sun java center把模式组成多层平台中的层,与2EE相似。前面曾介绍过,每一层有 自己的责任,与其他层分开。核心J2EE模式主要针对Web组件与业务逻辑(EJB)层,其组 织如下: 表示层模式,用于Web组件层 业务层模式,用于业务逻辑(BJB)层 集成层,连接EIS层的系统 这个类别定义下列表示层模式 Intercepting Filter(截获过滤) 提供请求预处理和后处理的方案,定义灵活的体系结构,可以声明对截获请求和响 应进行过滤。小服务过滤是这个模式的实现方法
第1章J2EE设计模式 · Front Controller(前端控制器) 通过中央控制器提供请求管理和处理。控制器取代通常发生在表小层的请求,从而 取代模型视图控制器(MVC, Model view Controller)模式的控制器部分。前端控 制器管胛内容读取、安全性、视图管理和导航。 View Helper(视图帮助器) 将负责表示(格式化输出——一视图)的编程逻辑与其他(业务)逻辑分开。表示格式 放在视图组件中,可能包括多个子组件,组成复杂视图。业务逻辑代码放在帮助器 组件中。帮助器组作的典型功能是内容读取、验诎适配。帮助器组件可以用 Business Delegate模式访问业务服务。 Composite View(复合视图) 是从原子子组件创建累计表示(视图)的灵活方案。表示的体系结构可以方便地组 织基本视图组件,使表示很灵活,还可以进行其他工作,包括个性化与定制。 Service-to- Worker(服务/工人 由 Dispatcher组件与 fRont Controller和 View Helper模式组合而成,先进行请求处理 再进行祧图处理,适合大型应用程序,类似于 Dispatcher View模式。 Dispatcher View(派遣视图) 似于 Service to Worker模式,也是由 DISpatcher组件! front Controller]uView er模式组合而成。但与 Service-to-Workeri模式不同的是,这个模式在进行视图处 理的期间进行请求处理,因此更适合小型应用程序 这个类别定义下列业务层模式: Business Delegate(业务代理) 减少层之间的耦合,特别是表示层与业务逻辑层之间。它提供门户代理,可以作为 业务逻辑层和ES层服务的通用入口。代理还可以缓存远程方法调用,从而提高性能。 这个模式叮以和 Service locator模式组合 Value Object(数值对象) 解决层之间交换数据及相关远程开销的问题。这个模式收集系列化对象中需要的所 有数据,用单个远程方法调用在层之间传输。这个模式通常是层之间交换数据和进 行通信的最佳方法,可以成功地减少远程方法调用,这在分布式系统中成本很高。 Session Facade 隐藏业务组件的细节和集中工作流程,提供客户机的粗粒接口,减少远程方法调用 开销,也适合声明式事务和安全管理。这个模式通常和其他模式组合,如 Service Value Object、 Value Object Assembler、 Value List Handler、 Service Activator' j Data Access Object这是J2EE模式中最重要的一个。 Composite Entity(复合实体) 解次BB1.实体Bean的远程接口开销,提供设计粗粒实体Bean的方法,将相依赖对 象合并为·个实体Bean,用JEJB1.l持久性模型,在EJB2.0持久性模型、木地接 和管理关系中经过时 value Object Assembler(数值对象汇编器)