本书特色:
本书是由Java开放源码领域的顶尖高手编写的,展示了如何使用最好的开放源码工具来开发J2EE应用。这些开放源码工具的组合使用可以减少实际应用中的Bug,并可以提高整个系统的稳定性和健壮性。本书用一个基于Web的宠物商店--PetSoar的开发作为实例,展示了整个项目的开发过程,在这个过程中,作者更关注于开发易于维护和灵活的应用,而不是仅仅展示最终结果。同时,作者为在开发过程的各个阶段应用开放源码的软件构件提供了一套方法。
本书包含以下内容:
开放源码工具和应用开发技术
高质量的开放潭码项目--JUint、Hibemate、WebWork、SiteMesh、Lucene和XDoclet等用开放源码工具创建PetSoar
读者可以在本书中找到以下问题的答案:
●如何将开放源码项目与开发过程相结合?
●如何选择合适的开放源码项目?
●如何进行单元测试与集成测试?
●如何更有效地实现程序员之间的交流?
本书供各级Java程序员阅读。
本书介绍了如何通过使用开放源码工具来构建一个现实的应用,以提高开发效率,降低企业开发费用。
本书共分三个部分,使基本概念、使用工具和开发应用三个过程贯穿于读者的学习当中。特别是本书提及的开发者工具箱,包含了诸多的开放源码项目,它们都是与J2EE长期协同工作的结晶。而且,书中的实例使通过重新创作著名的Sun Java 蓝图--PetStore应用,将JUnit、Ant、Hibernate、WebWork、SiteMesh、XDoclet以及Lucene等工具的应用演绎得淋漓尽致,有利于读者在开发过程中提高可用性、结构简洁性和复用性的能力。
本书适合于希望学习Java开放源码技术的程序员阅读。
第1部分 介 绍
第1章 本书概述
1. 1 使用开放源码技术
1. 2 了解设计和开发理论
1. 2. 1 先测试
1. 2. 2 少即多
1. 2. 3 总是问傻问题
1. 3 考察PetSoar项目
1. 4 抓住基础
小结
第2章 应用概况
2. 1 另一个宠物商店
2. 2 了解可维护性的重要性
2. 3 了解PetSoar的需求
2. 4 检查结构和技术
2. 4. 1 查看结构
2. 4. 2 查看实用库
2. 4. 3 使用存留和搜索
2. 4. 4 使用Web前端
2. 5 测试
小结
第2部分 建立开放源码工具箱
第3章 用JUnit进行单元测试
3. 1 测试的类型
3. 2 使用JUnit
3. 2. 1 JUnit的特征
3. 2. 2 写一个单元测试
3. 2. 3 运行一个单元测试
3. 2. 4 运行多个测试
3. 2. 5 你需要知道JUnit的一切
小结
第4章 用MOCks测试对象的交互作用
4. 1 测试对象的交互作用
4. 1. 1 考察测试状态中的一些易犯错误
4. 1. 2 探索替换物:测试交互作用
4. 2 使用模拟对象
4. 2. 1 实例场景
4. 2. 2 了解模拟对象的角色
4. 2. 3 了解模拟对象库
4. 2. 4 使用动态模拟
小结
第5章 用Hibernate存储对象
5. 1 了解持久化的复杂性
5. 2 用Hibemate2持久化对象
5. 2. 1 创建持久类
5. 2. 2 映射类到数据库中
5. 2. 3 配置Hibernate
5. 2. 4 获得一个会话
5. 2. 5 在数据库中存储对象
5. 2. 6 从数据库中检索对象
5. 2. 7 查询对象
5. 2. 8 持久化对象间的联系
5. 3 持久化层次结构对象
5. 4 了解Hibemate工具箱
5. 5 Hibemate同其他竞争技术的比较
5. 5. 1 Hibernate与EJB
5. 5. 2 Hibemate与JDO
5. 5. 3 Hibernate与DAO框架
小结
第6章 使用WebWork实现MVC模式
6. 1 了解模型视图控制器
6. 1. 1 检查模型层
6. 1. 2 检查视图层
6. 1. 3 检查控制器层
6. 1. 4 把全部层联系在一起
6. 1. 5 考证使用MVC的理由
6. 2 了解MVC. WebWork和XWork
6. 2. 1 考察XWork
6. 2. 2 考察WebWork
6. 3 进一步了解活动
6. 3. 1 一个简单的XWork实例
6. 3. 2 配置XWork
6. 3. 3 构造活动(活动组成)
6. 3. 4 从XWork中调用一个活动
6. 3. 5 使用参数和ActionContext
6. 4 应用物理学中的牛顿第三定律
6. 4. 1 了解XWork结果和活动链
6. 4. 2 考察WebWork结果和Servlet环境
6. 4. 3 配置WebWork
6. 4. 4 了解调度的角色
6. 4. 5 考察JSP和Velocity中的视图实例
6. 4. 6 基于组件的Web开发
6. 5 表达你自己
6. 5. 1 使用基础表达式
6. 5. 2 使用高级表达式
6. 5. 3 了解ValueStack
6. 6 考察类型转换
6. 6. 1 深入研究一个日期实例
6. 6. 2 指定默认转换规则
6. 6. 3 指定新的转换规则
6. 7 采用截取器分离事务
6. 7. 1 配置截取器栈
6. 7. 2 使用记录截取器
6. 7. 3 构建自己的截取器
6. 8 Validation--一个强大的截取器
6. 8. 1 考察一个没有使用XWork验证框架的实例
6. 8. 2 考察一个采用XWork验证框架的实例
6. 8. 3 使用内置的和用户自定义的验证
6. 8. 4 使用验证表达式
小结
第7章 用SiteMesh简化布局
7. 1 识别布局的问题
7. 2 使用面向对象的解决方案
7. 2. 1 装饰器设计模式
7. 2. 2 组合设计模式
7. 2. 3 结合模式
7. 3 用SiteMesh实现解决方案
7. 3. 1 SiteMesh的基本原理
7. 3. 2 创建一个装饰器
7. 3. 3 组成网页
7. 3. 4 考察SiteMesh
7. 4 使用技巧
7. 4. 1 将装饰器分组
7. 4. 2 不要惧怕引用
7. 4. 3 CSS是你的朋友
7. 4. 4 最小化HTML
7. 4. 5 分散关注点
小结
第8章 用Lucene添加搜索能力
8. 1 了解搜索的复杂性
8. 2 Lucene简介
8. 2. 1 了解Lucene的元素
8. 2. 2 索引一个文件
8. 2. 3 搜索文件
8. 2. 4 重新索引和删除一个已索引的文档
8. 2. 5 使用高级搜索
8. 2. 6 定制标志的进程
小结
第9章 用XDoclet生成配置文件
9. 1 XDOclet简介
9. 2 用XDoclet了解面向属性编程
9. 2. 1 了解属性的语法
9. 2. 2 运行XDoclet
9. 2. 3 用XDoclet应用高级的Hibernate或映射
9. 2. 4 使用XDoclet生成更复杂的工件
9. 2. 5 了解XDoclet任务和子任务
9. 2. 6有效地使用XDoclet
小结
第10章 交流与工具
10. 1 考察PetSoar开发
10. 2 管理不完善的交流
10. 2. 1 用一切可能的方法交流
10. 2. 2 使用源码交流
10. 2. 3 使用交流作为学习的工具
10. 3 考察工具箱
10. 3. 1 源代码配置管理--CVS
10. 3. 2 知识管理--WiKi
10. 3. 3 邮件目录--Maio~omo
10. 3. 4 实时讨论--IRC和即时消息
10. 3. 5 1DE-IDEA和Eclipse
10. 3. 6 问题追踪和任务管理--JIRA
10. 4 使用连续集成
10. 5 把工具连接在一起
小结
第11章 省时工具
11. 1 了解实用组件
11. 2 了解OSCache
11. 2. 1 介绍SampleNews. com
11. 2. 2 使用LOOP测试
11. 2. 3 考察OSCache标识符库
11. 2. 4 了解OSCache概念
11. 2. 5 缓存时间实例
11. 2. 6 查看高级的OSCache特征
11. 3 了解CommonsLang
11. 3. 1 考察最有用的类
11. 3. 2 使用Builder类
11. 4 了解Commons Collections
11. 5 了解Commons Logging
11. 5. 1 考察Commons Logging的优点
11. 5. 2 一个简单的实例
11. 6 了解Commons Digester
11. 6. 1 考察一个Digester实例
11. 6. 2 了解Digester规则
小结
第3部分 开发应用
第12章 建立开发环境
12. 1 在IDE内工作
12. 1. 1 问题:IDE不是自动化的
12. 1. 2 解决办法:自动构建工具
12. 2 将Ant用于你全部的构建需要
12. 2. 1 问题:Ant不是万灵药
12. 2. 2 解决办法:使用有意义的方法
12. 3 使用杂交处理方法
12. 4 组织你的项目
12. 4. 1 通过类型组织文件结构
12. 4. 2 通过部署组织文件结构
12. 4. 3 选择一个结构
12. 4. 4 PetSoar怎样
12. 5 管理单元测试
12. 5. 1 了解测试类型
12. 5. 2 考察测试小组. JUnit和批量测试
12. 6 使用版本控制
12. 7 部署PetSoar
小结
第13章 了解测试驱动开发
13. 1 为什么先测试
13. 1. 1 先测试与后测试
13. 1. 2 锁定需求
13. 2 了解测试技术
13. 2. 1 将单元测试与代码放在同一程序包中
13. 2. 2 从不跳过失败的测试
13. 2. 3 使用模拟对象孤立无法测试部分
13. 2. 4 何时使用接口和类
13. 2. 5 保持简洁
13. 2. 6 自顶向下工作
13. 2. 7 使用许多小的对象
13. 2. 8 保证测试组快速运行
13. 2. 9 避免静态和单件
13. 3 测试TDD循环
13. 3. 1 使用TDD的实例场景
13. 3. 2 实例场景重访
13. 3. 3 加强功能
小结
第14章 管理生命周期和组件依赖,
14. 1 了解组件和服务
14.
14. 2. 1 使用直接实例化
14. 2. 2 使用工厂
14. 2. 3 使用注册
14. 2. 4 使用容器
14. 3 了解组件生命周期
14. 4 了解反转控制
14. 4. 1 考察优点
14. 4. 2 考察缺点
14. 5 了解分离关注点(Separation of Concerns)
14. 6 使用容器来定义范围
14. 7 使用XWork的容器
14. 7. 1 配置容器
14. 7. 2 了解容器是如何工作的
14. 8 测试XWork组件
小结
第15章 定义域模型
15. 1 考虑域模型的优势
15. 2 处理层
15. 2. 1 层驱动与特性驱动方法的比较
15. 2. 2 选择自底向上. 自顶向下. 中间分离
15. 3 确定当前的目标
15. 4 向店中添加一个宠物
15. 4. 1 使用Hibernate实现PersistenceManager
15. 4. 2 我们的进展
15. 5 检索宠物
15. 5. 1 检索一个单一的宠物
15. 5. 2我们的进展
15. 6 持续分类目录
15. 6. 1 我们的进展
15. 6. 2 实现Category-Pet关联
15. 6. 3 我们的进展
15. 7 考虑性能和可维护性
小结
第16章 创建基于Web的界面
16. 1 添加一个宠物
16. 1. 1 创建AddPet活动
16. 1. 2 为AddPet创建视图
16. 1. 3 把全部连在一起试用
16. 2 显示一个宠物
16. 2. 1 创建一个ViewPet活动
16. 2. 2 重构活动
16. 3 编辑宠物
16. 3. 1 检查有效性
16. 3. 2 把全部连接在一起--第二次试用
16. 4 把宠物从这里拿走
16. 5 重构CRUD
16. 5. 1 消除在ViewPet和RemovePet中的重复
16. 5. 2 剩下的工作
16. 5. 3 完成最后一个重构
16. 5. 4 解耦验证
16. 6 更换宠物
小结
第17章 定义导航. 布局. 视觉和感觉
17. 1 组件化窗口组件表单
17. 2 形成更美妙的视感和感觉
17. 3 使用样式化风格
17. 4 导航到更好的用户界面
小结
第18章 实现浏览和查询功能
18. 1 定义应用需求
18. 2 浏览分类列表
18. 3 浏览宠物列表
18. 4 搜索商店中的宠物
18. 4. 1 实现LuceneSearcher
18. 4. 2 实现Lucenelndexer
18. 4. 3 进行到哪里了
18. 4. 4 查询任何类型的数据
18. 4. 5 进行到哪里了
18. 4. 6 实现全文检索
18. 4. 7实现分页
18. 5 把它组装起来
小结
第19章 增加购物车
19. 1 创建购物车
19. 2 创建WebWork活动
19. 3 购物车结账
小结
第20章 保护应用
20. 1 理解J2EE安全模型
20. 2 简化安全
20. 2. 1 使用HTTP请求包装器
20. 2. 2 使用安全过滤器
20. 2. 3 使用登录过滤器
20. 2. 4 在保护下工作
20. 3 使用更优雅的方法
小结
在当今的IT领域, Java在企业开发中是领先的技术. 由于管理需要越来越多的技术, 复杂的结构似乎爆炸式地增长, 留下许多不能与当今世界快节奏同步发展的疑难问题. 这些复杂性可以从Java2企业版本(J2EE)规范的快速更新看出来. 这些不必要的复杂性驱使我们寻找简化程序开发的方法.
现在, 不要误解我们, 我们喜欢J2EE!但是为什么它要花费那么长的时间才能完成项目呢?我们很早就是J2EE的使用者, 当它们发展的时候, 一直紧跟相关概念和复杂性. 这是个棘手的问题, 随着时间的推移, 我们开始利用可复用的开放源码技术, 这明显减少了开发这些应用所需的时间. 我们也开始研究哪些技术能实际帮助我们, 哪些已变成我们研究开发上的障碍.
这是一本关于使用开发技术和开放源码工具来降低构建企业应用费用的书. 我们的目的是向你展示如何把这些技术应用组成一体来构建一个现实世界的应用, 同时避免了复杂的概念, 而使用简单易懂的理论. 我们将帮助你扩大Java和J2EE框架方面的知识面, 以便开始自由使用经过无数次开发和研究得来的成果.
本书不仅教你如何利用开放源码技术, 而且可以使你马上投入工作, 它也将加强和扩大你的研究理论, 像我们一样, 用这样一种方式--很快, 你会挠挠自己的头惊奇地问:"为什么我不早点做这个呢?"为什么需要这本书
本书的两个目标使你无论是现在还是未来都将受益:
当前最近的目标是, 你会对众多令人惊奇的开放源码技术中的几个变得非常熟练.
从长远来看, 我们将介绍的简单技术和理论不论是现在还是未来都将适用, 即使
现在的技术可能被较好的技术所代替, 也还是如此.
我们使用这些技术和方法来重新创作Sun的Java蓝图--著名的PetStore应用. 我们的PetStore实现将不是一个精确的副本, 而是在各方面的提高, 包括可用性. 结构和简洁性. 我们把这个项目称为PetSoar, 是因为项目刚开始翱翔. 在这里只描述了贯穿本书的各种技术和技能的轮廓. 读者对象
正因为本书有两个目标--技术和方法, 本书相应地也适合两种类型的读者(尽管通常这两组实际包含同样类型的人)阅读.
第一种是任何希望学习Java开放源码技术的人. 本书中, 我们将就几个重要的对企业开发有帮助的开放源码项目做了更深一步的讲解. 这些技术包括JUnit. Ant. Hibernate. WebWork. SiteMesh. XDoclet和Lucene. 如果你对这些项目不是很熟悉, 或是你已经对这些技术有所熟悉而准备用它们解决问题的话, 我们将用这些工具针对你所遇到的问题进行有针对性的讲解, 并提供在现实世界中一步步地使用这些工具的指导方法.
第二种读者是那些已对项目的复杂性有了初步的认识而急于解决问题的人. 我们已经发现这些复杂性实际上是开发者所思考的结果, 即复杂的需求需要复杂的解决方案. 取而代之的是, 在本书中, 我们将展示如何应用最简单的原则在最短的时间里来达到目的. 我们将通过使用测试驱动开发(TDD)方法进行PetSoar应用的开发来达到这个目的, 这个实践表达出这样一个观点:少即多(Less is More).
本书约定
在本书中, 我们针对不同的原因使用不同的书写格式. 例如, 当需要你输入某些东西的时候, 我们把想要输入的文本加黑, 例如"Type Is-1然后按Enter". 当我们提到命令. 文件名或库时, 使用单字体(或者固定宽度字体)来表示, 例如, "正如你能看到的, Is命令列出两个文件:fileone. txt和filetwo. lgz, 这两个文件定位在directoryone库中. "
本书的结构
本书由三个不同的部分组成, 主要内容包括在第2部分和第3部分,
第1部分:介绍
本书的第1部分将作为一个导航图来告诉你在本书的其他部分将要讨论的内容. 主要介绍将要涉及的工具, 也包括有关PetSoar的应用概况和结构.
第2部分:建立开放源码工具箱
本书的第2部分将介绍我们所拥有的许多开放源码项目, 这已被包括在过去几年中用J2EE所创建的"开发者工具箱"中. 我们将讨论使用每项技术的理由, 从产品的使用中学习新的东西, 以及最终选择的可以提供类似或互补的功能的开放源码项目.
第3部分:开发应用
本书的最后部分全面完整地介绍了通过使用这些开放源码项目来实现PetSoar的不同特性. 在这个部分中, 我们也将正式向你介绍有关开发理论的轮廓, 并向你展示如何成功地把它们融合到你的专业工作中, 并产生令人难以想像的成功应用. 这部分展示了技术和方法是如何结合在一起而完成一个应用的.
本书的内容安排是逐步深入的, 因为我们知道, 我们是在为不同的读者编写此书, 有些读者可以直接阅读本书的主要章节或有关部分. 如果你已经掌握了第2部分所描述的工具, 可以跳过这些章节. 或者, 如果你想学习一个完整的工具, 可直接阅读第2部分:或者, 如果你正在构建一个不是以Web为基础的企业应用, 你可以跳过第3部分的有关章节.
本书之外
本书为你使用开放源码工具并将目标集中在构建简单的实际应用方面提供了一个好的开端, 但是帮助并不局限于此, 对于初学者来说, 可以参考一个相关的网站:
http://www.wiley.com/compbooks/walnes
网站内容如下所示:
》可以下载PetSoar应用, 并把它安装在你的个人计算机上.
》对本书内容的增加和有关补遗.
》一个邮件目录记载了在本书中有关作者和读者使用的工具和方法的讨论纲要.
》在本书出版后的有关技术更新可使你在工具和方法上与发展同步.
此外, 还有一本标题是Java Open Source Library的书是由JohnT, Bell. James和StanNg(John Wiley&Sons:Hoboken, NJ, 2003)编写的, 主要为"J2EE开放源码工具箱:用开放源码工具构建一个企业平台", 包括许多在本书中讨论的相同的工具, 我们会引用这本书.
应用软件的目的是解决某一领域的业务问题. 然而, 在进行应用软件开发时, 程序员不得不一方面关注用户的业务需求, 一方面关注要解决的技术问题, 他们经常发现, 用户需求的一点变更, 就会导致系统结构性的变化. 比如, 在一个基于Web的应用程序中, 用户突然想要增加全文检索功能, 而你对全文检索又一无所知, 更糟糕的是用户不认为这是一个多么了不起的功能, 你会怎么办呢?如果应用系统的每一部分开发都是从零开始的话, 项目的风险是极大的, 不仅仅是时间和费用的问题, 潜在的Bug经常会导致系统出现不可预知的问题, 甚至是崩溃.
开放源码使开发人员从底层功能开发中解放出来, 可以更好地关注于用户的业务和需求. 由于有了经过充分测试的代码, 系统的成本降低了, 周期缩短了, 风险减少了. 由于总体成本的降低, 用户更愿意加大在信息系统上的投入, 使信息系统的应用范围更为广泛, 这就为开发商提供了更多的商业机会.
然而, 如何在实际应用中使用开放源码项目仍然存在问题, 这些问题包括如何将这些项目与开发过程相结合?如何选择合适的开放源码项目?如何进行单元测试与集成
应用软件的目的是解决某一领域的业务问题. 然而, 在进行应用软件开发时, 程序员不得不一方面关注用户的业务需求, 一方面关注要解决的技术问题, 他们经常发现, 用户需求的一点变更, 就会导致系统结构性的变化. 比如, 在一个基于Web的应用程序中, 用户突然想要增加全文检索功能, 而你对全文检索又一无所知, 更糟糕的是用户不认为这是一个多么了不起的功能, 你会怎么办呢?如果应用系统的每一部分开发都是从零开始的话, 项目的风险是极大的, 不仅仅是时间和费用的问题, 潜在的Bug经常会导致系统出现不可预知的问题, 甚至是崩溃.
开放源码使开发人员从底层功能开发中解放出来, 可以更好地关注于用户的业务和需求. 由于有了经过充分测试的代码, 系统的成本降低了, 周期缩短了, 风险减少了. 由于总体成本的降低, 用户更愿意加大在信息系统上的投入, 使信息系统的应用范围更为广泛, 这就为开发商提供了更多的商业机会.
然而, 如何在实际应用中使用开放源码项目仍然存在问题, 这些问题包括如何将这些项目与开发过程相结合?如何选择合适的开放源码项目?如何进行单元测试与集成测试?如何更有效地实现程序员之间的交流?幸好, 针对这些问题在本书中都可以找到答案.
本书是由Java开放源码领域的顶尖高手编写的, 展示了如何使用最好的开放源码工具来开发J2EE应用, 这些工具的组合使用可以减少实际应用中的Bug, 并可以提高整个系统的稳定性和健壮性. 本书用一个基于Web的宠物商店--PetSoar的开发作为实例, 展示了整个项目的开发过程, 在这个过程中, 作者更关注于开发易于维护和灵活的应用, 而不是仅仅展示最终结果. 同时, 作者为在开发过程的各个阶段应用开放源码的软件构件提供了一套方法.
本书内容涉及到以下开放源码产品:
·Hibernate--超高性能的对象/关系持久性和查询服务
·OvenSymphony WebWork--开放源码的Web应用框架
·JUnit和Mock Objects--辅助进行快速. 健壮的单元测试
·XDoclet--辅助生成代码和自动配置文件
·Jakarta Lucene--为应用增加类似Google的针对数据仓库的智能搜索功能
·OpenSymphony SiteMesh--辅助创建有共同视觉效果和用户体验的站点
·OpenSymphony OSCache--方便地缓存Web站点的内容, 加快页面的调用速度
由于译者水平有限, 加之时间仓促, 书中错误和不妥之处在所难免, 希望读者多多批评指正.
译 者