本书由几位知名专家作序,肯定了本书的突出特点,即将J2EE与RUP技术结合起来,描述J2EE应用系统的开发,这在以前出版的书中是少有的。
本书以在线拍卖应用系统为例子,详细介绍了从最初的需求收集到系统实施的开发全过程。针对J2EE定制了RUP,给出了J2EE开发者路线图。通过阅读本书,能帮助读者快速着手设计和开发J2EE系统,并提高设计开发的效率。
无
关于本书
本书介绍如何使用Rational统一过程(RUP)和统一建模语言(UML)开发J2EE应用系统。目前有很多介绍J2EE和相关技术的书籍,同样有很多介绍软件开发过程的书籍,以及关于RUP的书籍;但是并没有一本书介绍并示范如何使用RUP的一个子集开发J2EE的应用系统,并且这个RUP内容的子集仅仅包含那些与构建J2EE应用最相关的内容——而不是包罗万象。本书正是RUP和J2EE技术之间的一座桥梁。
同时关注J2EE、RUP和UML是一件比较复杂的事情。如果希望在工作中准确地把握方向,则需要一个很好的路线图。 本书明确而详细地提供了这样一张路线图,本书提供了遍历J2EE应用系统开发活动的可靠路径。本书定义的“J2EE开发者路线图”是一个能够用于指导实际工作的流程。第1章中将详细说明本书的内容。
本书的读者
撰写本书的过程中,我们始终关注三类读者。第一类读者是软件架构师、设计师以及编码人员,他们熟悉J2EE平台和相关的技术,并且希望在软件开发过程环境中应用相关的技术。第二类读者是开发团队中熟悉 RUP的成员,他们希望在J2EE的开发活动中应用开发流程。第三类读者既不熟悉RUP也不熟悉J2EE,他们正在寻找一个使用RUP来指导J2EE应用系统开发的范例。
本书中的约定
本书大体上可以划分为两个部分。第一部分包括第2章到第5章,概述J2EE技术,介绍RUP和J2EE开发者路线图,并简要说明本书中介绍的示例。本书其余的内容被称作“流程章节”,在这些章节中包含了指导J2EE应用系统项目开发的流程。
我们对流程章节的内容进行了结构化的处理,以便读者一目了然,便捷地找到有兴趣的议题。每个流程章节基本上都按照活动的线索进行组织。书中提供了反映活动整体流程的图示,并指出与活动相关的输入工件和输出工件。针对每个活动,书中提供了纵览表,归纳了活动的目的,它的输入工件和输出工件,并概述在该活动中所执行的步骤。遵循该表中的内容,针对示例应用系统,描述每个步骤的细节。
在流程章节中使用简单的编排约定:书中会突出强调流程中的所有元素,例如活动、步骤和工件。
〖BT2〗致谢
我们首先感谢Rational软件公司允许我们使用公司的各种知识和产品(特别是RUP的内容)。同时我们也感谢公司的创始人和员工,他们建立的公司使命感、核心价值观和企业文化鼓励我们写出了本书。
我们尤其感谢我们的审核小组。他们广泛和深入的知识帮助我们最大可能地保证本书的方向和质量。感谢小组成员Kevin Benner、Grady Booch、John Cheesman、Jim Conallen、John Crupi、Kevin Kelly、Philippe Kruchten、Boris Lublinsky、Bruce MacIsaac、Jim Ning、 Davyd Norris、 Oliver Sims、Dave West 和 Andy Winskill。
顺便提一下,Grady也是创作本书的提议者。当Grady看到你完成了一个很好的演讲稿时,他就会建议你写一本相关的书籍,后来我才理解他是很认真的。Grady——感谢你从始至终的帮助和鼓励。
同时感谢对本书提供帮助的相关人员,包括客户、Rational合作伙伴、同事等,感谢Alan Brown、Christina Cooper-Bland、Ian Forsythe、Manjinder Gahir、Bob Houston、Russell Norlund、Alan Perkins和Jim Thario。
感谢Addison-Wesley出版社参与本书出版的每一位同事。我们特别感谢编辑Paul Becker对我们的指导和建议。
最后,我们特别感谢我们的家人。没有他们在每个周末和晚上的支持,我们不可能完成此书。
感谢我的太太Karen,孩子Daniel、Thomas和Christopher,感谢他们的理解和支持。同时感谢我的母亲Nancy和父亲Bob。—— Peter Eeles
感谢我的丈夫Bob,他是我值得尊敬的同事和朋友,他提供了毫无怨言的支持和鼓励。同时感谢我的孩子Katherine和Ryan,他们带给我生活中每天的乐趣。——Kelli Houston
我要深深地感谢我的妻子Jola和孩子们Tommy、Natasza,谢谢他们的理解和支持。——Wojtek Kozaczynski
很长一段时间,我一直希望找到一本这样的书——清楚地描述一种新技术、开发流程以及一个使用这种技术和开发流程的项目,以便我能够理解那些为许多软件开发组织所误解的基本元素间的关系。同时我也很清楚,要在一本书中描述清楚所有的事情是非常困难的。
明确描述一种新技术是一件十分困难的事情。当然,如果你是这方面的专家,可以详细地描述方方面面的技术细节,讨论每一部分,写作一本让IT界为之兴奋、疯狂的“巨著”。但是这样的书也容易成为一本充满说教的让人觉得枯燥乏味的教科书,大多数章节充斥着“为什么”或“如何做”的说教。事实上,读者仅仅需要一本实用的书,能方便地得到感兴趣的信息,而不是一本教科书。如果不结合实际项目实例并结合相关的开发流程来介绍新技术,读者不容易理解如何真正地在项目中应用该技术。
描述清楚一种开发流程也是一件十分困难的事情。我十分理解其中的艰辛,这是我过去6年来为之奋斗的事情。描述流程一方面太空泛,以至于读者很难找到可以在实际的开发项目中使用的方法、模板、文档资料。同时流程很容易被描述得过于详细,给出大量适合某一特定技术领域的方法、过程、文档资料、模板,从而使其变得内容庞大、过程笨重、极其不通用。流程的惟一价值就是实实在在地帮助软件开发的实践者。如果没有结合具体的例子,流程将给人抽象和神秘的印象;同样,如果没有具体的方法去实现流程,软件开发者将不得不去创造发明它们。因而,我们会陷入一个典型的困境:做了会被责备,不做也会被责备。
展现一个特定软件项目被开发的过程,并不是一件非常令人感兴趣的事情,除非你是该软件的开发或维护团队成员。毕竟你使用和别人完全相同的方法的可能性很小。单单给出一个实例,而并不说明使用该方案的理由,这样做通常是没有价值的。另外,许多教科书只给出简单的小项目,对读者也许并没有实际意义,甚至可能误导了读者。
但是,如果我们能把〖HT5K〗技术、开发流程〖HT5F〗结合起来描述,就可以避免上述的问题。这里所说的技术是在一个完整的项目中实际应用的技术,所说的开发流程是用来开发该项目的流程。通过流程,我们能够理解为什么决定采用这样或那样的技术,这远远比技术决定本身更为重要,因为读者希望能在项目中重用流程,而并不是简单拷贝一个现成的方案。通过一个简单而有价值的项目,读者能够高屋建瓴地看待系统开发中最难解决的问题,同时理解系统的复杂性和体系架构,而不是局限于某个技术特征的细节内容。
我的同事兼好友Kelli、Peter和Wojtek成功地在一本书中综合了以下三方面的内容:
技术。包括UML、Java、J2EE。
流程。包括Rational统一过程(RUP)。
项目。包括在线拍卖应用系统。
值得庆幸的是,该书并没有变成厚厚的“巨著”。对我来说,我十分高兴他们能把RUP当作基本的流程方法。仿佛芭蕾《胡桃夹子》中的木偶, RUP跃然出现在书中。他们对RUP的所有相关活动、模板及精心挑选的内容,从新的角度进行了诠释。这本书同时帮助读者理解了RUP是一个可用并且可定制的流程,而并非一个复杂的大“怪物”。
J2EE 的开发者可以把这本书当作一个“指南针”,也可以随时进入某一章节探究细节。通过本书,我并没有学到很多我没用过的J2EE技术;但我还是通过在线拍卖应用系统这个例子学到了许多。虽然我谙熟RUP,但我从书中看到了许多令人赞叹的地方。我确信读者会愉快地从书中学到很多东西,不仅仅学会了下一个项目要使用的技术,还学会了顺利运作项目的方法。Kelli 、 Peter和Wojtek让1+1+1等于10,祝贺他们!并且感谢他们的辛勤工作。
Philippe Kruchten
Rational 会员
RUP开发主管
我在Amazoncom上搜索关于Java的书,找到了大约1700多本,这对一项具有十年发展历史的技术而言是不可思议的。当我仔细察看它们的书名之后,就发现这些书大抵都是教授如何使用Java技术,罕有介绍如何使用Java技术设计和开发系统架构。这倒也符合逻辑,在会跑之前一定要学会走。在想要利用这种技术来构建系统之前,必须学会这种技术本身。
在编写《Core J2EE Patterns》时,我和Deepak Alur、Dan Malks专门在最后增加了模式驱动的设计的内容。我们的初衷是想介绍如何使用J2EE 模式来设计应用系统解决商业问题。一开始,我们挑选一个合适的J2EE模式来描述某种规范流程,但是,随着我们深入地描述这种流程,我们意识到这一章的内容会越来越多,以至于超过前面的所有的内容。读者的早期反馈指出这应该是一本模式设计书籍,Java开发员不想在书中看到大量有关流程的内容,他们需要更多代码的范例。这倒值得庆幸,因为我们并不精通方法论,很高兴能把这些问题留给这方面的专家处理。
幸运的是,这样的著作终于出现了。Kelli、Peter和Wojtek作出了巨大的贡献,他们通过软件开发流程展现了J2EE的精髓。作者采用输入工件、活动、输出工件的方式提供了一种描述模式。通过实例,深入浅出地介绍了如何使用软件流程来开发J2EE项目。一旦你开始上手和熟悉RUP的风格,你会习惯在项目开发时使用这种流程——习惯成自然。继而会需要大量关于流程的描述,本书正是一个相关的丰富资源。
同一个流程,既可以看作“规范性”的内容,也可以看作“说明性”的内容。因而,无论是新手或专家,还是介于两者之间的开发者,都可以从本书中受益。
我认为技术不会越来越简单,而会越来越复杂。结果是,新技术又帮助人们创建更复杂的系统。J2EE是包含一系列技术和API的技术平台,它提供了一个基本平台,帮助人们开发复杂的商业系统。但是应该如何做呢?在一个典型的新技术生命周期中,一般是先完成新技术的学习阶段,接着需要学习如何最佳地运用这种技术,然后是什么情况下避免运用这种技术。可能要花费数年的时间掌握这些内容。不幸的是,早期的尝试者得不到正式的最佳经验以及模式等内容的指导,当然,技术没被大范围地实际使用是基本的原因。
通过《Core J2EE Patterns》一书的成功,我们了解到开发人员非常喜欢J2EE 模式。模式似乎成为了开发人员在重用设计和抽象对象时的利器。但是,在此之上,还有很大的进展空间,即如何结合流程与模式来构建系统。这正是本书作者的贡献,本书结合了RUP和J2EE。RUP是一个非常有用的流程,在本书中,针对J2EE技术,RUP被很好地进行了定制。我非常欣赏的一点是,本书作者能把J2EE设计模式和RUP设计流程结合起来。同时,作者也认可了设计模式的价值。当模式的组合用于解决更大的问题时,它们才体现出真正的价值。这就是作者所提出的“参考架构”,在我看来,这本书能够帮助读者快速着手设计和开发J2EE系统,并提高设计开发的效率。
我想,这本书对那些希望利用RUP的优点,同时采用先进方法来设计、开发J2EE系统的开发人员大有裨益。
John Crupi
《Core J2EE Patterns》一书的合著者
Sun 公司
(美)Peter Eeles,Kelli Houston,Wojtek Kozaczynski:Peter Eeles: 就职于Rational软件公司。是Rational战略服务机构的高级技术顾问,为采用RUP的机构提供支持,帮助他们掌握系统架构方面的工具与方法。他是《Building Business Objects》和《Software Architecture》的作者之一。
Kelli Houston: 就职于Rational软件公司,是高级架构顾问,她负责开发能加速J2EE与.NET开发的综合解决方案。她是《Component-Based Software Engineering》一书的作者之一。
Wojtek Kozaczynski: 就职于Rational软件公司,是构架与应用框架总监,他负责开发针对架构框架与可重用软件资产的工具与流程。是《Component-Based Software Engineering》一书的作者之一。
尤克滨 周夕崇 张晨曦 胡宁:尤克滨: 尤克滨,现任Borland Software Principal Consultant,国内知名软件工程专家,拥有丰富的工程实践经验,是Rational Certified RUP Consultant。著有《UML应用建模实践过程》与《Use Case需求开发实践过程》;是《Pattern:Connecting SelfService Applications to the Enterprise》的作者之一;主持翻译了《软件过程改建简明实践》以及《软件配置管理策略与Rational ClearCase》等著作。
周夕崇: 周夕崇,现就职于中国金融电子化公司软件开发中心,任项目技术负责人,体系架构师。长期从事用Java(J2SE,J2EE)技术开发大型应用系统的工作。技术特长是基于Java技术的软件体系架构设计和面向对象的分析与设计。参与过的大型项目有中国人民银行办公自动化系统、全国企业信贷登记咨询系统、全国个人信贷征信系统等。
张晨曦: 张晨曦,现就职于IBM公司,长期从事中间件软件的技术支持工作,熟悉J2EE平台的体系结构和技术。
胡宁: 胡宁,现任IBM中国有限公司软件部Rational华东区高级技术顾问。对于Rational的软件工程技术有着深刻的理解,目前主要专注于软件开发过程改进和面向对象可视化建模技术的研究。在软件工程技术方面有多年的实践经验,曾为多家客户提供过软件工程技术咨询服务。在此之前,胡宁曾就职于Alcatel中国电讯软件开发有限公司,主要从事电信解决方案的软件开发工作,参加过大型软件项目的开发工作。
第1章引言
第2章Java 2企业版平台简介
2.1 企业的顾虑
2.1.1 业务的顾虑
2.1.2 整合的顾虑
2.1.3 开发的顾虑
2.2 多层次体系结构和J2EE平台
2.3 J2EE平台概览
2.3.1 J2EE技术概览
2.3.2 容器
2.3.3 表示层
2.3.4 业务层
2.3.5 整合层
2.3.6 J2EE部署配置
2.4 J2EE构件技术
2.4.1 applet
2.4.2 应用程序客户机
2.4.3 Java servlet
2.4.4 JSP
2.4.5 EJB
2.5 组装和部署
总结
第3章 Rational 统一过程简介
3.1 最佳经验——RUP的基础
3.2 RUP的核心概念〖
3.2.1 工件
3.2.2 角色
3.2.3 活动
3.2.4 工种
3.2.5 工作流明细
3.2.6 迭代
3.2.7 阶段
3.3 RUP是一种流程框架
总结
第4章 J2EE开发者路线图介绍
4.1 RUP 路线图是什么
4.2 J2EE开发者路线图:范围和机理
4.3 J2EE开发者路线图当中针对J2EE的内容
总结
第5章 示例应用系统介绍
5.1 应用系统概述
5.2 问题说明
5.3 涉众和用户
5.3.1 涉众:关注的问题和责任
5.3.2 用户:关注的问题和责任
5.4 功能特性和约束
5.5 其他需求和属性
5.5.1 非功能属性
5.5.2 用户环境
5.5.3 部署环境
总结
第6章 需求
6.1 需求与迭代开发
6.2 需求概述
6.3 工作流明细:定义系统
6.3.1 活动:捕获通用词汇
6.3.2 活动:找出Actor和Use Case
6.3.3 活动:排序Use Case
6.3.4 活动:复审需求
6.4 工作流明细: 精化系统定义
6.4.1 活动:细化Use Case
6.4.2 活动:结构化Use Case模型
6.4.3 活动:复审需求
总结
第7章 分析
7.1 分析与迭代开发
7.2 分析概述
7.3 工作流明细:定义初始架构
7.3.1 活动:架构分析
7.3.2 活动: 复审初始架构
7.4.1 活动:用户体验建模
7.4.2 活动:复审用户体验
7.4.3 活动:Use Case分析
7.4.4 活动:复审分析
总结
第8章 设计
8.1 设计与迭代化开发
8.2 设计概览
8.3 工作流明细:精化架构
8.3.1 活动:确定设计机制
8.3.2 活动:确定设计元素
8.3.3 活动:整合现有设计元素
8.3.4 活动:描述分布与并发
8.3.5 活动:复审架构
8.4 工作流明细:细化设计
8.4.1 活动:Use Case设计
8.4.2 活动:子系统设计
8.4.3 活动:构件设计
8.4.4 活动:类设计
8.4.5 活动:数据库设计
8.4.6 活动:复审设计
总结
第9章 实施
9.1 实施与迭代化开发
9.2 实施概览
9.3 工作流明细:构造实施模型
9.3.1 活动:构造实施模型
9.3.2 活动:复审实施
9.4 工作流明细:实施设计元素
9.4.1 活动:实施设计元素
9.4.2 活动:执行单元测
9.4.3 活动:复审实施
总结
第10章 补充内容
10.1 业务建模
10.2 测试
10.3 部署
10.4 配置和变更管理
10.5 项目管理
10.6 环境
10.7 其他要考虑的问题
10.8 结论:来自作者的话
附录A 描述软件体系架构
附录B 建模约定
附录C 词汇表
参考文献