Deepak Alur是Sun Java中心的企业Java架构师,具有14年以上的开发经验。他的主要研究兴趣在于利用面向对象技术、模式、Java和J2EE技术完成大型企业应用的架构、设计和实现。
John Crupi是Sun Java中心的杰出工程师和首度Java架构,他有17年以上的分布式对象开发经验,他的主要研究兴趣在于创建可重用的、可扩展的J2EE架构,以及进一步提升J2EE模式的水准。
Dan Malks是Sun Java中心的主任工程师。他有16年以上的开发经验,他的主要研究兴趣在于面向对象技术以及这种技术在企业级的、基于Web Service的项目中的应用。他发表过很多作品,其中既有在行业杂志上发表的论文,也有讨论Jave、J2EE技术及模式的专著。
展开
本书关注的主要内容,是使用J2EE的核心技术蜒包括JSPTM、Servlet、EJBTM、JMSTMAPI等蜒实现企业应用过程中的模式、最佳实践、设计策略以及经过验证的解决方案。其中的J2EE模式目录包括21个模式以及大量策略,有助于记录、促成运用以上技术的最佳实践。
前言
自从本书第1版出版以来,关于最初那15个模式,我们收到了大量反馈意见。最近几年来,J2EE模式社区目录服务器(JPCLS)上的活动一直都非常活跃、非常成功,每天都有很多精彩的意见交流。在这段时间里,我们也和客户一起进行了不少重要的大型J2EE架构设计、开发项目。把这段时期的经验和反馈植入到原有模式的更新工作和新模式的归档工作中,也确实是一个费力而艰苦的过程。我们特别关注了反馈中提及最多的内容:对J2EE技术规范和Web Service最新版本的支持。
我们完全修订、更新了最初的15个模式,使得本书覆盖了J2EE技术1.4版的规范。我们在这些最初的模式中加入了很多新的策略。另外,我们还记录了6种新模式,以便改进模式语言,为构建、理解、使用J2EE框架提供更好的概念抽象。虽然这些模式中的每一个本身都极为实用,但我们还进一步相信,当开发者将其组合起来解决大型问题时,它们更能显出威力。因此在本书的新版中,引入了一个我们正在探究的、与此相关的全新领域,我们称此为“微架构”。
所谓“微架构”,就是搭建应用程序和系统的积木块。与列入目录的那些单独模式相比,这个概念是一种更高层面的抽象,它常常表现为一组相互关联的模式组合,用于解决在应用架构中经常重现的一些共通问题。
我们乐于把“微架构”当作一种由相互关联的模式组成的网络,由此形成一种现成的解决方案,用于解决一个粒度更大的问题,比如子系统的设计。
本版中包括了一个叫Web Worker的微架构。它所解决的问题是:一个J2EE应用怎样与一个工作流系统集成。它特别讨论了使用系统集成模式让工作流系统中的用户与J2EE应用进行交互的问题。
本书讲述的是Java 2企业版平台(J2EE)的模式。本书新版中记录的J2EE模式,能够用于解决在J2EE平台下进行软件应用开发的设计者常常遇到的那些问题。在这个模式目录中记录的模式都是在设计实战中发现的,正是因为使用了它们,我们才能为自己的客户创建出了成功的J2EE应用。
本书描述了很多在J2EE平台下证明可行的解决方案,重点强调了以下核心J2EE技术: JavaServer Pages (JSP)、servlet、Enterprise JavaBeans (EJB) 组件、Java Message Service (JMS,Java消息服务)、JDBC以及 Java Naming and Directory Interface (JNDI,Java命名与目录接口)。对于那些在J2EE平台下经常重现的问题,我们通过J2EE模式目录和J2EE重构给出了解决方案。在开发新系统或是改进现有系统的设计时,你可以应用这些想法。本书记录的这些模式能够有助于你迅速熟练地掌握J2EE技术,从而构建出健壮、高效的企业应用。
今天,正如以往一样,我们中间有很多人天真地以为,学会了一种技术,也就等于是学会了用这种技术进行设计。诚然,对于利用某一技术进行设计来说,懂得这种技术是成功的重要元素之一。但现在有很多Java图书,对技术细节(比如API的一些专门用法等等)做出了出色的讲解,但对如何应用这种技术却未作深入考察。要想学会设计,就需要实际设计经验,需要和其他开发者一起分享关于最佳实践和不佳实践的知识。
本书中传达的经验来自我们的工作实战。我们属于Sun公司的Sun Java中心(SJC)咨询机构。在工作当中,我们经常遇到一些情况,因为技术发展过于迅速,设计者和开发者都仍然在奋力理解技术本身,而无暇理解如何使用该项技术进行设计。
因此,简单地告诉设计者和开发者怎样写出优秀代码,或是建议他们使用servlet和JSP开发表现层,用EJB组件开发业务层,这都是不够的。
那么,在这样的情况下,一个热心的J2EE架构师又怎样才能不单单是学到“做什么”、还能学到“不做什么”呢?哪些实践构成了最佳实践?哪些是不佳实践?怎样完成从问题到设计,再到实现的整个过程?Sun Java中心与J2EE模式目录
从初创时期以来,Sun Java中心的架构师们就在与来自全球的客户一起合作,致力于成功地设计、规划、构建、部署各种不同类型的基于Java和J2EE的系统。Sun Java中心是一个快速成长的咨询机构,一直在招募新员工,加入它经验丰富的架构师队伍。
目前已经有大量已验证有效的设计和构架,将这些设计经验固化下来并和其他人一起分享,是我们行业的一项重要需要。我们很早就认识到了这种需要,从1999年就开始以模式的形式记录我们在J2EE平台下的工作经验。虽然我们翻阅了各种现有文献,却没能发现有哪个模式目录是专门记载J2EE平台下的模式的。有很多书论及J2EE技术中的一种或多种,出色地介绍了技术,剖析了技术规范中的微妙细节。我们发现其中有些书还提供了一些设计上的考虑思路,因此也特别有益。
在2000年6月的JavaOne大会上,我们第一次公开发表了我们关于J2EE模式的想法。从那以来,我们收到了来自架构师和开发者的大量热忱反馈。其中一些人表示特别乐意进一步学习模式,还有一些人则说,他们使用过这些模式,只不过没有加以命名、也没有记录下来罢了。人们体现出来的对J2EE模式的兴趣鼓励我们进行进一步的工作。
因此,我们整理出了J2EE模式目录,在2001年3月,这个目录的beta版通过Java开发者联盟(JDC)首次公布给了J2EE社区。基于整个社区的大量反馈,那一份beta版的文稿最终发展成了你现在见到的这本书。
我们希望这些在J2EE平台下的模式、最佳实践、策略、不佳实践和重构能让大家从中受益。本书的讨论范围
本书讨论的内容包括:
* 在J2EE平台下使用模式。
基于我们在J2EE平台的经验,我们编纂了本书中的模式目录。这一份J2EE模式目录描述了在J2EE平台下架构和设计应用的最佳实践。本书着重考察了以下J2EE技术:servlet、JSP、EJB组件和JMS。
* 通过最佳实践来设计应用了servlet、JSP、EJB组件和JMS技术的应用系统。
仅仅学会了技术本身和API还不足够,同样重要的是要学会怎样使用技术进行设计。我们记录了在我们的经验中应用这些技术的最佳实践。
* 防止在J2EE平台的设计和架构中“重新发明轮子”。
模式鼓励设计的重用。重用现成的解决方案,能够缩短设计开发应用程序的周期—这也当然包括J2EE应用。
* 鉴别出现存系统中的不佳实践,并利用J2EE模式重构这些设计,以形成更好的解决方案。
知道哪些做法有效,这是一件好事。但知道哪些做法无效也同样重要。我们在本书中记录了自己在设计J2EE应用时遇到的一些不佳实践。本书不讨论的内容
本书没有讨论以下内容:
* 如何使用Java或J2EE技术编程
本书讨论的不是编程。虽然很多内容都基于J2EE技术,但我们没有描述API细节。如果你希望学习Java编程,或是学习使用J2EE中的任何一种技术,现有很多种出色的著作,还有不少在线资源,都可以作为教程。如果你想要学习某一门特定的技术,我们强烈推荐Java官方主 * 采用哪种开发过程和方法论
我们并不特别推荐任何一种开发过程或方法论,因为本书讨论的内容与这两方面都关系不大。所以,本书不会教授任何可以用于开发项目的过程或方法论。如果你想要学习过程和方法论的话,现已有很多论著讨论各种面向对象的方法论,对于那些轻量级的过程,比如极限编程,也有不少新书论及。
* 怎样使用统一建模语言(UML)
本书不会教你如何使用UML。我们大量地使用了UML(特别是类图和序列图)来记录模式,描述静态和动态交互关系。如果要学习UML,请参考Grady Booch、Ivar Jacobson 和James Rumbaugh的著作〈UML用户指南》[Booch]以及〈UML参考手册》[Rumbaugh]。谁应该读这本书
本书写给所有热心关注J2EE的人,程序员,架构师,开发者以及技术经理。简单地说,就是任何对在J2EE平台下设计、架构、开发应用程序有点儿兴趣的人。
我们力图让这本书成为一部写给J2EE架构师和设计者的培训指南。我们认为良好的设计、架构得当的项目具有很高的重要性,所以我们需要优秀的架构师达到这个水准。
对于那些开发者水准参差不齐的开发团队,如果我们把模式、最佳实践和不佳实践都做出详尽的归档,以此在团队中实现知识与经验的共享和传播,这可能会起到难以估价的帮助作用;我们也希望本书能部分地满足类似需求。本书的组织
本书的组织分为两部分。
第一部分
第一部分“模式和J2EE”是一个关于J2EE和模式的导论。它考察了开发JSP、servlet和EJB时的设计考虑。这一部分也包括了J2EE平台下的不佳实践和重构。
第1章“导论”简要地讨论了多个问题,包括模式、J2EE平台、模式的定义以及模式的归类。最后引入了J2EE模式目录。
第2章“表现层设计考虑和不佳实践”、第3章“业务层设计考虑和不佳实践”分别讨论了表现层以及业务/集成层的设计考虑和不佳实践。这里所说的设计考虑,是指在J2EE平台下工作时,一个J2EE开发者/设计者/架构师需要考虑的问题。在阅读这两章中的论题时,可以参照其他的多种资源(比如官方技术规范以及一些出色的相关论著)来获得相关问题的一些细节信息。
第4章“J2EE重构”考察了一些重构,我们在自己的实际工作中遇到了这些重构,它们也确实帮助我们把原本不够理想的设计提升为更好的方案。这些重构也提供了看待本书其他内容的另一种思路,我们认为这对于模式目录是一种有价值的补充材料。本章体现出Martin Fowler和他的著作〈重构》[Fowler]对我们的影响。对于熟悉〈重构》一书的读者,本章的形式也应该相当眼熟。但是,这一章的内容完全基于J2EE技术,而Martin Fowler在他的论著中则是在另一个层面考察重构的。第二部分
第二部分“J2EE模式目录”列出了J2EE模式目录。目录中包含的模式构成了本书的核心内容。
第5章“J2EE模式概览”,是J2EE模式目录的一个综述。这一章一开始对模式的理念进行了高层次的讨论,并且解释了我们按照系统的分层对模式进行归类的原因。该章也介绍了我们用来记录本书所有模式的“J2EE模式模板”。该章考察了所有的J2EE模式,并且用一张图描述了模式之间的相互关系。另外该章还包括了一种我们称为“模式目录路线图”的东西。这张路线图列举了一些与J2EE设计和架构相关的常见问题,并且把这些问题与特定的模式或重构关联起来,通过这些模式、重构给出了问题的解决方案。理解模式之间的关系以及这张路线图,对于实际应用这些模式至关重要。
第6章“表现层模式”描述了8种模式,它们处理的是在J2EE平台的Web应用设计中,怎样使用servlet、JSP、JavaBeans和定制标记的问题。在这些模式中描述了多种实现策略,并且也提出了一些常见问题,比如请求处理、应用分隔、生成复合视图等。
第7章“业务层模式”,描述了9种模式,它们处理的是怎样应用EJB在J2EE平台下设计业务组件的问题。该章介绍的模式提供了应用EJB和JMS技术的最佳实践。另外,这些模式的相关部分还涉及了其他技术—比如JNDI、JDBC等—的讨论。
第8章“集成层模式”描述了4种模式,它们处理的是怎样把J2EE应用与资源层和各种外部系统集成起来的问题。这些模式使用了JDBC和JMS技术在业务层和资源层之间实现集成。
“尾声”讨论的是一个高层次的主题:怎样利用多个模式一起解决一个大型问题。该章详尽地讨论了“Web Worker微架构”这个示例,展示了如何通过多个模式来集成一个J2EE应用和一个工作流系统。本书的官方网站和联络信息
在本书的官方网站上,我们会提供内容的更新信息以及其他一些资料。网址是:
这个网站也附属于Sun Java蓝图网站:
你的评论、建议、反馈都可以通过以下邮箱寄给作者:
j2eepatterns-feedback@sun.com
另外还有J2EE模式社区邮件列表服务,邮箱为j2eepatterns-interest@java.sun.com,可以免费订阅和参与。通过以下网址,你可以订阅兴趣小组的邮件,也可以浏览以往的讨论存档:
我们想感谢Sun全球软件服务副总裁Cheryln Chin、Sun杰出工程师和首席服务架构师James Baty,如果没有他们的支持、远见以及他们对我们工作的信赖,本书的工作就不可能完成。
我们愿将最大的感激和谢意致予Rajmohan“Raj”Krishnamurthy。如果没有他的帮助,本书就不会有这么多示例代码,而且我们也从他出色的评论意见中受益匪浅。他对本书新版的规划、开发、评审工作做出了不可或缺的帮助。
本书内容经过多位专家的审读,他们的深刻见解、评论意见、反馈建议,为本书的最终成型做出了重要贡献,通过他们的帮助,各个模式的表述比初稿更加清晰、实用;因此我们也愿对以下专家表示谢意:ThoughtWorks公司首席科学家Martin Fowler;Sun J2EE 蓝图团队的Sean Brydon和Inderjeet Singh;Sun公司的Craig Russel,他是 Java数据对象(JDO)技术规范的负责人/产品架构师;ObjectIdentity公司的JDO专家David Jordan;Sun公司的JSP技术规范负责人Mark Roth;Domain Language的 Eric Evans;BEA系统公司的解决方案架构师Mario Kosmiskas;LogicLibrary负责技术的副总裁Brent Carlson;Macromedia 的Sean Neville;Sun Java中心的Java架构师Sameer Tyagi;Chris Steel;Bill Dudney;Gary Bollinger;以及ThoughtWorks公司的Gregor Hohpe。
像这样一本书,肯定需要来自各方面的难以计数的帮助才能得以完成,所以我们很难面面俱到地感谢每一个人为此做出的贡献。
我们想感谢James Gosling和Michael Van de Vanter 领导的Sun Jackpot团队,他们的工作将本书推进到了全新的舞台上。
我们还想感谢Chuck Geiger领导的eBay.com V3团队、Terry Bone领导的福特金融中心的ATD框架团队,他们在企业中实际应用了J2EE模式来构建下一代的系统架构和平台。
感谢Sun Java中心的同事Murali Kaundinya、Ashok Mollin、Ramesh Nagappan和Heidi Schuster。
我们想感谢JetBrains公司提供的IntelliJ IDEA开发工具,为本书编写示例代码时我们使用了这种工具,相当满意。
我们还想感谢J2EE模式社区邮件列表(j2eepatterns-interest@sun.com)上的很多成员,多年以来他们的讨论和反馈一直很有帮助。
特别要对本书的技术编辑Solveig Haugland说一声“谢谢”。她是我们团队的重要一员。她在技术上的编辑工作大大提高了本书终稿的质量。
我们想感谢Prentice Hall出版社的Greg Doench和Debby Van Dijk给予我们的信任和鼓励。
特别感谢无糖红牛饮料提供的动力,让我们能每天写作16小时。第1版致谢
我们想感谢Sun全球Java中心的主管Stu Stern和负责.COM咨询的副总裁Mark Bauhaus,如果没有他们的支持、远见以及对我们工作的信赖,本书的工作就不可能完成。
我们想感谢Ann Betser,要不是她的支持、鼓励和循循善诱的建议,我们的工作也不会成功。
我们想对Sun Java中心(SJC)PSA/iWorkflow参考实现开发团队的架构师们表达诚挚的感谢,他们是:Fred Bloom、Narayan Chintalapati、Anders Eliasson、Kartik Ganeshan、Murali Kalyanakrishnan、Kamran Khan、Rita El Khoury、Rajmohan Krishnamurty、Ragu Sivaraman、Robert Skoczylas、Minnie Tanglao和Basant Verma。
我们想感谢Sun Java中心J2EE模式工作组的成员们: Mohammed Akif、Thorbi歳n Fritzon、 Beniot Garbinato、Paul Jatkowski、Karim Mazouni、Nick Wilde和Andrew X. Yang。
我们想感谢Sun Java中心的首席方法专家Brendan McCarthy,他令我们的工作诸事协调,并提出了大量建议。
我们想感谢把这些模式介绍给客户的Jennifer Helms和John Kapson。
我们想对以下来自世界各地的Sun Java中心架构师表达谢意,他们的支持、反馈、建议都令我们受益匪浅,他们是:Mark Cade、Mark Cao、Torbj歳n Dahl巒、Peter Gratzer、Bernard Van Haecke、Patricia de las Heras、Scott Herndon、Grant Holland、Girish Ippadi、Murali Kaundinya、Denys Kim、Stephen Kirkham、Todd Lasseigne、Sunil Mathew、Fred Muhlenberg、Vivek Pande、John Prentice、Alexis Roos、Gero Vermaas、Miguel Vidal。
我们想对支持、鼓励我们的管理者Hank Harris、Dan Hushon、Jeff Johnson、Nimish Radia、Chris Steel和Alex Wong表达谢意。
我们还想感谢在Sun公司中与我们合作的以下同事:
Sun软件系统组的Bruce Delagi;Sun软件工程部门的Mark Hapner、Vlada Matena; Forte产品组的Paul Butterworth和Jim Dibble;iPlanet产品组的Deepak Balakrishna;J2EE蓝图团队的Larry Freeman、Cori Kaylor、Rick Saletta和Inderjeet Singh;Heidi Dailey;Java开发者联盟的Dana Nourie、Laureen Hudson、Edward Ort、Margaret Ong和Jenny Pratt。
我们想感谢以下各位对本书的反馈、建议和支持:
ThoughtWorks公司的Martin Fowler和Josh Mackenzie;Richard Monson Haefel; Goldman Sachs公司的 Phil Nosonowitz 和Carl Reed;Rational软件公司的Jack Greenfield、Wojtek Kozaczynski和Jon Lawrence;TogetherSoft的Alexander Aptus;Zaplets.com 的Kent Mitchell ;Bill Dudney; David Geary; Hans Bergsten; J2EE模式兴趣小组 (j2eepatterns-interest@ java. sun.com) 的成员。
我们想对本书的首席技术编辑Beth Stearns表示特别的谢意和感激,她负责整理我们的手稿,让全书明了可读,与此同时还要随时掌控我们的工作进度,同我们一道完成一个高强度的工作计划。
我们想感谢技术编辑Daniel S. Barclay、Steven J. Halter、Spencer Roberts和Chris Taylor,他们出众的专业能力、细致的评审反馈对本书的完成非常重要。
我们想感谢Prentice Hall出版社的Greg Doench、Lisa Iarkowski、Mary Sudul和Debby Van Dijk;Sun公司出版社的Michael Alread和Rachel Borden,他们使本书的诞生成为可能。