书籍详情
expert one-on-one J2EE Development without EJB中文版
作者:(美)詹森;赫鲁;JavaEye译
出版社:电子工业出版社
出版时间:2005-09-01
ISBN:9787121016844
定价:¥59.80
购买这本书可以去
内容简介
这本书拥有一大堆“看点”。譬如说,它的作者Rod Johnson拥有10年编写Java程序的经验,目前是Servlet和JDO 2.0两个JSR专家组的成员;再譬如说,书中着力介绍的Spring、Hibernate、WebWord等都是时下流行的开源框架,IoC、AOP之类都是时下流行的概念词汇。而最大的看点就赫然摆在这本书的封面上:“without EJB”。我们曾经在无数的书籍和文章中看到,EJB是J2EE的核心技术之一;而Rod Johnson的这本书竟然宣称,绝大多数的J2EE应用根本不需要EJB。这种近乎挑衅的姿态令任何一个负责的J2EE架构师很难不萌生一探究竟的念头——不论你是打算赞同他还是打算驳斥他。 但所有这些尽皆不是本书最大的价值所在。选择一种架构、一种技术的依据是什么?Rod Johnson认为,应该是基于实践的证报、来自历史项目或亲自试验的经验,而不是任何形式的偶像崇拜或者门户之见。书中谈到了企业应用方方面面的问题和解决办法,而这些方案无一不是这种“循证方法”的产物。除了把这些方案交给读者,Rod Johnson通过这本书希望传达的、更为重要的信息正是“循证”的工作方式——那原本就是应该是程序员的工作方式。下面摘录一篇评论文章:重温经典——J2EE without EJB 一年了,但每次我看到这本书仍然会有一种心情澎湃的感觉。这是我一年里第三次看这本书,而且这次我看到的是它的中文版。我很少看中文版的书,但这次我居然在看完了两遍这本书的英文版后又买了本中文版的书。因为这本书对我太重要了,它对我的影响力甚至比Design pattern带给我的冲击还又大,它带我的不仅仅是技术上的提高,还有整个思想观念和思维方式的变化。也因为这本书的中文版在JavaEye上也叫嚣了好久了,也因为这本书的几个译者都是值得我尊敬的人。我对potian的尊敬有时甚至达到了崇拜的地步,而robbin、dlee、gigix、moxie、曹等几位也都是江湖上也都是出名的一流高手。乍一看这本书的名字,Expert one on one J2EE development without EJB并没有给人带来太冲击。毕竟关于J2EE的书太多了,而without EJB看上去有点象是故意挑衅EJB的感觉。一本J2EE的书怎么可能会给人带来信念或思维的冲击呢?但是它做到了,它不仅使自己变成了不朽的经典,也使Rod Johnson成为了我最近一年的新偶像。这本书的前五章是让人宕气回肠的五章,每次看这几章的内容都会感觉非常过瘾。因为它不仅向整个EJB的架构和传统观念发起了冲击,而且它的每一条分析都是如何的有理有据,如此的让人信服。Rod Johnson是一个实用主义者,他不是全盘否定了EJB的价值,而是从实用的角度出发,对EJB的方方面面的功能进行了深入分析,并说明了EJB的优点和缺点。分布式对象、多线程模型、SFLB、传统的分布式架构,一个个的EJB的神话被揭穿了。如果说Rod Johnson的前一本书是对EJB的方方面面零星地提出了怀疑和批判,那么这本书则对上一本书的思想得到了升华,将这些思想进行了汇总,并以深入的方式表达出来。我们中的大多数人生活在人云亦云的世界里,或者象Ted Neward说的那样,我们就象足球比赛里的足球被人踢来踢去。EJB,IOC、AOP,groovy ruby python那样的动态语言、AJAX、ruby on rail,一样一样的新技术在往外冒,于是我们随着潮流被这个技术踢向了另一个技术。我并不是追随新技术有什么不好,但是假如我们学会象Rod Johnson的那种怀疑权威,那种从实用的角度对技术进行深入分析的思考,我们的世界可能会就不一样了(当然我们要想不想被人踢来踢去,我们必须要有深厚的技术功底,而不是人云我否的那样别人赞,我们就骂)。这也就是我读这本书的最大收获,以前我学struts、EJB或者更早的其它技术时,我从来没有怀疑过它们的设计有没有问题,有没有更佳的解决方案,而是象小学生背书一样将这些东西全盘接收。但是现在我每学一种新技术,都会从不同的角度分析它的优劣和思想,这样的思考方式对我们的开发生涯也许会有巨大的影响。当然这本书的另一个亮点是它对各种技术、开源架构进行了详尽的对比分析。市面上没有其他(也许是我孤陋寡闻)任何一本书会将如此多的技术进行如此深入分析,并进行的对比,说明各自的优缺点各使用场合。以前只能在某些人的blog或TheServerSide上零零星星地发现一些个别的内容。而这本书则将J2EE的各个层面的技术都进行了深入全面地分析,IOC(Spring, Pico, Hivemind)、AOP架构(AspectJ, AspectWerkz, JBoss AOP, Spring),Web层的MVC架构(Struts, Spring, Webwork)和其它类型的解决方案(Tapestry, JSF, ASP.Net),持久层架构(iBatis,Spring DAO, hibernate JDO)与历史,远程连接等等。Rod Johnson的技术功底在此体现无遗,他对J2EE的各种技术的理解都达到如此多的深度确实令人佩服。有人认为这本书给Spring做托,我对此只能表示无奈。确实这本倡导轻量级容器,倡导用AOP来替换EJB的一些服务,倡导用JDBC框架简化数据访问,但是这些都是从实用的角度考虑的,因为Spring确实给我们带来了方便,让我们开发的程序更有效率更健壮。再说有谁不喜欢把自己创造的产品象孩子一样爱护的?难道Gavin King不喜欢hibernate,难道robbin不喜欢他一手创办的论坛?这是个人的成就感,正是这种成就感推动着他们将他们的产品做得更出色。最后说说这本书的中文版,其实我不太喜欢看中文版的书,我更喜欢Rod Johnson那种严谨又井井有条的文笔,虽然这样的文笔算不上优美,但是却让人有一种那肃然起敬的感觉,让人感觉到真正的英国绅士(虽然他是澳大利亚人,呵呵。而且他说话或在bbs上留言都会有文绉绉的感觉)。但是中文版看起来确实比英文版的快,而且这本书读起来确实很流畅。毕竟每一位译者都是技术高手,再加上gigix的文笔润色,虽然有些小错误,但无论如何它的翻译质量绝对称得上是精品。当然我们不能忽略的是Rod Johnson在这本书之前写的另一本书, Expert one on one J2EE design and development。很多人把它当成J2EE without EJB的第一版,他们错了。这本书的价值和观念的冲击甚至比J2EE without EJB还要大,因为它出版在2002年,一个EJB 2还在流行的年代,因为它促成了Spring的诞生。还因为这本书里的好多章节到了现在仍然有很大的价值,这是J2EE without EJB无法替代的,它对EJB在技术层面上深入剖析比起J2EE without EJB要细致好几倍。其中的第4章更是任何Java开发者必看的经典。本文摘自http://blog.itpub.net/xiecc
作者简介
RodJohnson是一名企业Java架构师,在保险、电子商务和金融行业的信息化领域有丰富的经验。他是欧洲最大的门户网站之一的J2EE架构师,并且以顾问的身份参与了大量的项目。Rod在悉尼大学(UniversityofSydney)获得了音乐和计算机科学的学位。在回到软件开发领域之前,他还获得了音乐学的博士学位。他有相当深厚的C/C++技术背景,并且从Java和.J2EE发布之初就已经开始使用它们。他积极地参与到Java社群过程(JCP)之中,是JSR-154(SetMet2.4)和JDO2.0规范专家组的成员。自2000年以来,他参与写作了好几本J2EE方面的书籍,畅销书ExpertOne-on-OneJ2EEDesignandDevelopment(Wrox,2002年)便是出自他的笔下。
目录
Why“J2EE Without EJB” 1
为什么要“J2EE Without EJB” 1
聚光灯下的EJB 1
EJB Under the Spotlight 1
J2EE还剩什么? 3
What's Left of J2EE 3
站在十字路口的J2EE 4
J2EE at a Crossroads 4
前行的路 5
The Way Forward 5
主旋律 5
轻量级框架和容器 10
我们还应该使用EJB吗? 11
Should We Ever Use EJB? 11
小结 12
Summary 12
Goals 13
目 标 13
生产率 13
Productivity 13
问题 14
传统J2EE方案解决生产率问题的办法 15
提升生产率更好的办法 20
OO 26
业务需求的重要性 28
The Importance Of Business Requirements 28
经验过程的重要性 28
The Importance Of An Empirical Process 28
小结 29
Summary 29
Architectures 31
各种架构 31
架构性构件 31
Architectural Building Blocks 31
业务服务层 31
向外部暴露业务对象 35
数据访问层,或EIS层 40
J2EE架构 42
J2EE Architectures 42
两种EJB架构 42
两种非EJB架构 47
J2EE架构实例 54
J2EE Architectures in Practice 54
“经典的”J2EE远程EJB架构 54
本地EJB架构 57
特制的非EJB架构 59
iBatis JPetStore v 3.1 60
“轻量级容器架构”:示例应用系统 61
确定是否采用应用服务器 62
小结 63
Summary 63
The Simplicity Dividend 65
简单性的红利 65
复杂性的代价 65
The Cost of Complexity 65
在J2EE应用系统中,导致复杂性产生的原因 66
Causes of Complexity in J2EE Applications 66
导致复杂性的架构性原因 66
导致复杂性的文化性原因:一个依靠复杂性为生的产业 71
复杂到什么地步就是过度了? 75
How Much Complexity Is too Much Complexity? 75
简单还是幼稚? 75
刚刚够好就行吗? 77
变化的趋势 77
总结 78
Summary 78
EJB, Five Years on 81
EJB,五年间 81
炒作和经验 81
Hype and Experience 81
EJB和J2EE行业 82
实践中的EJB 82
一个过时的组件模型 82
An Aging Component Model 82
Java语言的进步 83
.NET的挑战 83
Web Service 85
敏捷方法学的兴起 86
关于EJB目标的混淆 86
从未出现的组件市场 88
方兴未艾的新范式:AOP 88
EJB, 我们真正需要什么?为什么无状态Session Bean如此流行? 89
What Do We Really Want from EJB, or Why Stateless Session Beans Are So Popular 89
声明性事务管理 90
远程调用 92
集群 92
线程管理 94
EJB实例池 94
资源池 95
安全 95
业务对象管理 96
总结:EJB的服务 97
EJB,我们不想要什么? 97
What Don’t We Want From EFJ? 97
容器的锁定 98
丑陋的结构,泛滥的类 98
部署描述文件的地狱 100
类加载器的地狱 100
测试 100
EJB的滥用 102
复杂的编程模型 102
简单的事情会变得困难 103
“让开发人员忽略企业应用的复杂性”,这个目标现实吗? 103
生产率的损失 104
可移植性的问题 104
EJB能浴火重生吗? 104
Can EJB Reinvent Itself? 104
工具支持 104
EJB 3.0 105
神话与谬论 106
Myths and Fallacies 106
J2EE == EJB 106
使用EJB的可疑论据 107
继续前进 107
Moving Forward 107
选择是否使用EJB 107
传统的知识 107
今天的选择 108
后EJB时代的舆论 109
标准,创新,和开源 112
小结 118
Summary 118
Lightweight Containers and Inversion of Control 121
轻量级容器与控制反转 121
轻量级容器 122
Lightweight Containers 122
什么是轻量级容器? 122
我们到底为什么需要容器? 124
轻量级容器 vs. EJB容器 125
EJB的好处 126
管理业务对象 126
Managing Business Objects 126
接口与实现的分离 126
EJB:不完善的解决方案 127
控制反转 127
Inversion of Control 127
IoC实现策略 128
IoC容器 135
IoC容器间的移植 137
对代码风格、测试以及开发过程的影响 138
Implications for Coding Style, Testing, and Develoment Process 138
代码风格 138
可测试性 139
开发过程 139
使用企业级服务 139
Applying Enterprise Services 139
小结 141
Summary 141
Introducing the Spring Framework 143
Spring框架简介 143
来历与动机 143
History and Motivation 143
一个分层的应用框架 144
A layered Application Framework 144
基础构建模块 145
J2EE之上的Spring 146
Web应用中的Spring 147
核心bean工厂 149
The Core Bean Factory 149
基础接口 149
通过XML组装bean 151
非XML格式的bean声明 154
组装应用对象 155
自动装配和依赖检查 159
构造子决议 160
生命周期回调 162
复杂的属性值 164
资源设置 165
典型的Java/J2EE资源访问 166
bean容器中的资源声明 168
工厂bean 171
Spring应用上下文 175
The Spring Application Context 175
生命周期回调 177
信息源 178
文件资源 180
Bean Factory 后处理 182
小结 184
Summary 184
Declarative Middleware Using AOP Concepts 187
基于AOP概念的声明性中间件 187
AOP 101 188
动机 188
J2EE中的AOP 190
AOP in J2MM 190
定义 191
Defintions 191
历史 194
作为AOP子集的EJB 195
EJB as a Subset of AOP 195
AOP实现策略 197
AOP Implementation Strategies 197
动态代理 197
动态字节码生成 198
Java代码生成 198
使用定制的类加载器 198
语言扩展 198
AOP实现 199
AOP Implementations 199
AspectJ 199
AspectWerkz 201
JBoss 4 201
Spring 203
Nanning 207
AOP联盟 207
AOP设计问题 207
AOP Design Issues 207
AOP的危险性 207
AOP设计的建议 210
随意点菜的J2EE 211
J2EE à Ia carte 211
Spring中的AOP实践 212
AOP in Practice with Spring 212
使用ProxyFactoryBean 213
便利的FactoryBean 217
自动代理 218
编程用法 219
使用源码级元数据提供AOP之上的抽象 220
Using Source-level Metadata to Provide an Abstraction above AOP 220
.NET范例 220
概念级元数据 vs. 实现级元数据 221
编程访问上下文信息 222
Spring范例 222
EJB 3.0 225
编程风格的暗含意味 225
Implications for Programming Style 225
前后一致的命名规范 225
避免依赖AOP基础设施 226
受控异常和增强 227
参考资料 227
References 227
书籍 227
论文 227
文章和在线资源 227
小结 228
Summary 228
Transaction Management 231
事务管理 231
上层(High-level)事务管理 231
High-level Transaction Management 231
传统的J2EE事务管理 232
Classic J2EE Transaction Management 232
J2EE容器作为事务协调器 233
The J2EE Container as Transaction Coordinator 233
人见人爱的CMT 234
Everybody Loves CMT 234
典型应用:本地无状态Session Beans 235
直接使用JTA 236
Direct Use of JTA 236
插曲:远程事务传播 237
Interlude:Remote Transaction Propagation 237
轻量级事务基础设施 238
Lightweight Transaction Infrastructure 238
Spring Framework的事务管理 239
Transaction Management with the Spring Framework 239
事务声明 240
编程式事务处理 243
Programmatic Transaction Demarcation 243
直接使用PlatformTransactionManager 243
事务模板 243
声明式事务管理 246
Declarative Transaction Demarcation 246
AOP ProxyFactoryBean和TransactionInterceptor 247
通过接口来工作的AOP ProxyFactoryBean 249
简化的配置:TransactionProxyFactoryBean 250
源代码级别的元数据 251
事务管理策略 251
Transaction Management Strategies 251
JtaTransactionManager 253
DataSourceTransactionManager 253
JdoTransactionManager 255
HibernateTransactionManager 256
选择J2EE服务器的提示 257
Implications for J2EE Server Choice 257
小结 258
Summary 258
Persistence 261
持久化 261
常见持久化策略 262
Common Persistence Strategies 262
持久化模式概览 262
流行的J2EE数据访问解决方案 263
选择一种持久化策略 265
透明持久化和领域对象的行为 268
Java持久化技术简史 268
A Brief History of Java Persistence Technologies 268
Java O/R映射解决方案的缓慢成长 269
entity bean的败笔 271
实践中的数据访问技术 271
Data Access Technologies in Practice 271
资源管理 272
JDBC 273
iBATIS SQL映射 275
JDO 278
Hibernate 281
数据访问对象(DAO)模式 285
The Data Access Object Pattern 285
业务对象与数据访问对象 285
DAO和透明持久化 287
数据访问对象的种类 288
DAO设计中的问题 289
DAO基础设施的问题 292
使用Spring框架进行数据访问 293
Data Access with the Spring Framework 293
通用的数据访问异常 293
再论业务对象与数据访问对象的关系 295
JDBC 298
iBATIS SQL映射 301
JDO 302
Hibernate 304
小结 307
Summary 307
Persistence 261
持久化 261
常见持久化策略 262
Common Persistence Strategies 262
持久化模式概览 262
流行的J2EE数据访问解决方案 263
选择一种持久化策略 265
透明持久化和领域对象的行为 268
Java持久化技术简史 268
A Brief History of Java Persistence Technologies 268
Java O/R映射解决方案的缓慢成长 269
entity bean的败笔 271
实践中的数据访问技术 271
Data Access Technologies in Practice 271
资源管理 272
JDBC 273
iBATIS SQL映射 275
JDO 278
Hibernate 281
数据访问对象(DAO)模式 285
The Data Access Object Pattern 285
业务对象与数据访问对象 285
DAO和透明持久化 287
数据访问对象的种类 288
DAO设计中的问题 289
DAO基础设施的问题 292
使用Spring框架进行数据访问 293
Data Access with the Spring Framework 293
通用的数据访问异常 293
再论业务对象与数据访问对象的关系 295
JDBC 298
iBATIS SQL映射 301
JDO 302
Hibernate 304
小结 307
Summary 307
Replacing Other EJB Services 341
替换其它的EJB服务 341
线程管理 342
Thread Management 342
线程神话 342
EJB线程模型 345
EJB实例池 346
EJB Instance Pooling 346
何时需要实例池? 347
何时不需要实例池 347
EJB线程机制和缓冲池的替代方案 349
Aiternatives to EJB Threading and Pooling 349
线程模型 349
ThreadLocal“缓冲池” 357
实例池概述 358
声明性安全 359
Declarative Security 359
EJB安全模型 359
EJB模型的缺陷 359
借助AOP的声明式安全 359
JMS和消息驱动Bean 360
JMS and Message-driven Beans 360
小结 360
Summary 360
Web Tier Design 363
Web层设计 363
目标和体系结构的讨论 364
Goals and Architectural Issues 364
Web层设计目标 365
用Servlet和JSP定制的MVC 366
融入整体架构 368
硬编码连接的单例业务对象 369
请求驱动的Web MVC框架 374
Request-driven Web MVC Frameworks 374
Struts 1.1 375
WebWork2 381
Spring的Web MVC框架 388
与中间层的集成 400
适宜的视图技术 401
Web MVC的其它实现方式 403
Alternative Approaches to Web MVC 403
Portals和Portlets 403
事件驱动的Web MVC框架 404
小论ASP.NET 409
总结 410
Summay 410
Unit Testing and Testability 411
单元测试与可测试性 411
为何测试很重要? 412
Why Testing Matters 412
单元测试的目标 414
Goals of Unit Tesing 414
确保可测试性 415
Ensuring Testability 415
编程风格 415
如何让你的代码难于测试 416
来自标准库的难题 420
提高可测试性的技巧 421
依赖倒置 425
AOP 425
单元测试技巧 425
Unit Testing Techniques 425
替换 425
模仿对象 426
编写有效测试 430
测试驱动开发(TDD) 433
Test-driven Development(TDD) 433
好处 433
对TDD的反对意见 434
TDD实践 436
学习TDD 436
案例研究:Spring的经验 437
Case Study:The Spring Experience 437
测试Spring应用程序 440
Testing Spring Applications 440
对POJO进行测试 440
Spring的抽象带来的好处 440
何时需要依赖Spring API? 441
使用替换配置进行测试 442
覆盖率分析和其他测试工具 443
Coverage Analysis and Other Test Tools 443
测试生成器 444
覆盖分析工具 444
突变测试工具 447
资源 448
Resources 448
小结 449
Summary 449
Performance and Scalability 452
性能与可伸缩性 452
定义 453
Definitions 453
设置清晰的目标 454
Setting Clear Goals 454
体系结构的选择:影响性能和可伸缩性的关键因素 455
Architectural Choices:The Key to Performance and Scalability 455
对象分布、集群和农场 456
不同实现的选择 464
Implementation Choices 464
摆脱EJB服务设施对性能的影响 464
结果总结 469
缓存和代码优化 472
Caching and Code Optimization 472
代码优化,以及为何要避免它 472
缓存 473
潜在代码优化 474
调优和部署 477
Tuning and Deployment 477
JVM 477
应用服务器 477
框架配置 478
数据库配置 478
一种循证的性能策略 479
An Evidence-based Approach to Performance 479
基准测试 480
采样(Profiling) 481
诊断 485
资源 486
Resources 486
总结 486
Summary 486
The Sample Application 489
示例应用系统 489
Pet Store(宠物店)业务需求 490
Pet Store Requirements 490
iBATIS JPetStore 3.1 490
中间层 491
远程调用机制 493
可改进的空间 494
Spring JPetStore 494
中间层 496
数据访问层 499
Web层 502
远程机制 510
访问远程服务 513
编译和部署 516
Build and Deployment 516
WAR部署中的一些问题 516
资源引用 517
JSP和JSTL 518
部署Spring JPetStore 519
小结 520
Summary 520
Conclusion 521
结 语 521
回顾 522
Looking Back 522
前行 524
Moving Forward 524
指导方针 531
Guidelines 531
写在最后 536
Last Words 536
为什么要“J2EE Without EJB” 1
聚光灯下的EJB 1
EJB Under the Spotlight 1
J2EE还剩什么? 3
What's Left of J2EE 3
站在十字路口的J2EE 4
J2EE at a Crossroads 4
前行的路 5
The Way Forward 5
主旋律 5
轻量级框架和容器 10
我们还应该使用EJB吗? 11
Should We Ever Use EJB? 11
小结 12
Summary 12
Goals 13
目 标 13
生产率 13
Productivity 13
问题 14
传统J2EE方案解决生产率问题的办法 15
提升生产率更好的办法 20
OO 26
业务需求的重要性 28
The Importance Of Business Requirements 28
经验过程的重要性 28
The Importance Of An Empirical Process 28
小结 29
Summary 29
Architectures 31
各种架构 31
架构性构件 31
Architectural Building Blocks 31
业务服务层 31
向外部暴露业务对象 35
数据访问层,或EIS层 40
J2EE架构 42
J2EE Architectures 42
两种EJB架构 42
两种非EJB架构 47
J2EE架构实例 54
J2EE Architectures in Practice 54
“经典的”J2EE远程EJB架构 54
本地EJB架构 57
特制的非EJB架构 59
iBatis JPetStore v 3.1 60
“轻量级容器架构”:示例应用系统 61
确定是否采用应用服务器 62
小结 63
Summary 63
The Simplicity Dividend 65
简单性的红利 65
复杂性的代价 65
The Cost of Complexity 65
在J2EE应用系统中,导致复杂性产生的原因 66
Causes of Complexity in J2EE Applications 66
导致复杂性的架构性原因 66
导致复杂性的文化性原因:一个依靠复杂性为生的产业 71
复杂到什么地步就是过度了? 75
How Much Complexity Is too Much Complexity? 75
简单还是幼稚? 75
刚刚够好就行吗? 77
变化的趋势 77
总结 78
Summary 78
EJB, Five Years on 81
EJB,五年间 81
炒作和经验 81
Hype and Experience 81
EJB和J2EE行业 82
实践中的EJB 82
一个过时的组件模型 82
An Aging Component Model 82
Java语言的进步 83
.NET的挑战 83
Web Service 85
敏捷方法学的兴起 86
关于EJB目标的混淆 86
从未出现的组件市场 88
方兴未艾的新范式:AOP 88
EJB, 我们真正需要什么?为什么无状态Session Bean如此流行? 89
What Do We Really Want from EJB, or Why Stateless Session Beans Are So Popular 89
声明性事务管理 90
远程调用 92
集群 92
线程管理 94
EJB实例池 94
资源池 95
安全 95
业务对象管理 96
总结:EJB的服务 97
EJB,我们不想要什么? 97
What Don’t We Want From EFJ? 97
容器的锁定 98
丑陋的结构,泛滥的类 98
部署描述文件的地狱 100
类加载器的地狱 100
测试 100
EJB的滥用 102
复杂的编程模型 102
简单的事情会变得困难 103
“让开发人员忽略企业应用的复杂性”,这个目标现实吗? 103
生产率的损失 104
可移植性的问题 104
EJB能浴火重生吗? 104
Can EJB Reinvent Itself? 104
工具支持 104
EJB 3.0 105
神话与谬论 106
Myths and Fallacies 106
J2EE == EJB 106
使用EJB的可疑论据 107
继续前进 107
Moving Forward 107
选择是否使用EJB 107
传统的知识 107
今天的选择 108
后EJB时代的舆论 109
标准,创新,和开源 112
小结 118
Summary 118
Lightweight Containers and Inversion of Control 121
轻量级容器与控制反转 121
轻量级容器 122
Lightweight Containers 122
什么是轻量级容器? 122
我们到底为什么需要容器? 124
轻量级容器 vs. EJB容器 125
EJB的好处 126
管理业务对象 126
Managing Business Objects 126
接口与实现的分离 126
EJB:不完善的解决方案 127
控制反转 127
Inversion of Control 127
IoC实现策略 128
IoC容器 135
IoC容器间的移植 137
对代码风格、测试以及开发过程的影响 138
Implications for Coding Style, Testing, and Develoment Process 138
代码风格 138
可测试性 139
开发过程 139
使用企业级服务 139
Applying Enterprise Services 139
小结 141
Summary 141
Introducing the Spring Framework 143
Spring框架简介 143
来历与动机 143
History and Motivation 143
一个分层的应用框架 144
A layered Application Framework 144
基础构建模块 145
J2EE之上的Spring 146
Web应用中的Spring 147
核心bean工厂 149
The Core Bean Factory 149
基础接口 149
通过XML组装bean 151
非XML格式的bean声明 154
组装应用对象 155
自动装配和依赖检查 159
构造子决议 160
生命周期回调 162
复杂的属性值 164
资源设置 165
典型的Java/J2EE资源访问 166
bean容器中的资源声明 168
工厂bean 171
Spring应用上下文 175
The Spring Application Context 175
生命周期回调 177
信息源 178
文件资源 180
Bean Factory 后处理 182
小结 184
Summary 184
Declarative Middleware Using AOP Concepts 187
基于AOP概念的声明性中间件 187
AOP 101 188
动机 188
J2EE中的AOP 190
AOP in J2MM 190
定义 191
Defintions 191
历史 194
作为AOP子集的EJB 195
EJB as a Subset of AOP 195
AOP实现策略 197
AOP Implementation Strategies 197
动态代理 197
动态字节码生成 198
Java代码生成 198
使用定制的类加载器 198
语言扩展 198
AOP实现 199
AOP Implementations 199
AspectJ 199
AspectWerkz 201
JBoss 4 201
Spring 203
Nanning 207
AOP联盟 207
AOP设计问题 207
AOP Design Issues 207
AOP的危险性 207
AOP设计的建议 210
随意点菜的J2EE 211
J2EE à Ia carte 211
Spring中的AOP实践 212
AOP in Practice with Spring 212
使用ProxyFactoryBean 213
便利的FactoryBean 217
自动代理 218
编程用法 219
使用源码级元数据提供AOP之上的抽象 220
Using Source-level Metadata to Provide an Abstraction above AOP 220
.NET范例 220
概念级元数据 vs. 实现级元数据 221
编程访问上下文信息 222
Spring范例 222
EJB 3.0 225
编程风格的暗含意味 225
Implications for Programming Style 225
前后一致的命名规范 225
避免依赖AOP基础设施 226
受控异常和增强 227
参考资料 227
References 227
书籍 227
论文 227
文章和在线资源 227
小结 228
Summary 228
Transaction Management 231
事务管理 231
上层(High-level)事务管理 231
High-level Transaction Management 231
传统的J2EE事务管理 232
Classic J2EE Transaction Management 232
J2EE容器作为事务协调器 233
The J2EE Container as Transaction Coordinator 233
人见人爱的CMT 234
Everybody Loves CMT 234
典型应用:本地无状态Session Beans 235
直接使用JTA 236
Direct Use of JTA 236
插曲:远程事务传播 237
Interlude:Remote Transaction Propagation 237
轻量级事务基础设施 238
Lightweight Transaction Infrastructure 238
Spring Framework的事务管理 239
Transaction Management with the Spring Framework 239
事务声明 240
编程式事务处理 243
Programmatic Transaction Demarcation 243
直接使用PlatformTransactionManager 243
事务模板 243
声明式事务管理 246
Declarative Transaction Demarcation 246
AOP ProxyFactoryBean和TransactionInterceptor 247
通过接口来工作的AOP ProxyFactoryBean 249
简化的配置:TransactionProxyFactoryBean 250
源代码级别的元数据 251
事务管理策略 251
Transaction Management Strategies 251
JtaTransactionManager 253
DataSourceTransactionManager 253
JdoTransactionManager 255
HibernateTransactionManager 256
选择J2EE服务器的提示 257
Implications for J2EE Server Choice 257
小结 258
Summary 258
Persistence 261
持久化 261
常见持久化策略 262
Common Persistence Strategies 262
持久化模式概览 262
流行的J2EE数据访问解决方案 263
选择一种持久化策略 265
透明持久化和领域对象的行为 268
Java持久化技术简史 268
A Brief History of Java Persistence Technologies 268
Java O/R映射解决方案的缓慢成长 269
entity bean的败笔 271
实践中的数据访问技术 271
Data Access Technologies in Practice 271
资源管理 272
JDBC 273
iBATIS SQL映射 275
JDO 278
Hibernate 281
数据访问对象(DAO)模式 285
The Data Access Object Pattern 285
业务对象与数据访问对象 285
DAO和透明持久化 287
数据访问对象的种类 288
DAO设计中的问题 289
DAO基础设施的问题 292
使用Spring框架进行数据访问 293
Data Access with the Spring Framework 293
通用的数据访问异常 293
再论业务对象与数据访问对象的关系 295
JDBC 298
iBATIS SQL映射 301
JDO 302
Hibernate 304
小结 307
Summary 307
Persistence 261
持久化 261
常见持久化策略 262
Common Persistence Strategies 262
持久化模式概览 262
流行的J2EE数据访问解决方案 263
选择一种持久化策略 265
透明持久化和领域对象的行为 268
Java持久化技术简史 268
A Brief History of Java Persistence Technologies 268
Java O/R映射解决方案的缓慢成长 269
entity bean的败笔 271
实践中的数据访问技术 271
Data Access Technologies in Practice 271
资源管理 272
JDBC 273
iBATIS SQL映射 275
JDO 278
Hibernate 281
数据访问对象(DAO)模式 285
The Data Access Object Pattern 285
业务对象与数据访问对象 285
DAO和透明持久化 287
数据访问对象的种类 288
DAO设计中的问题 289
DAO基础设施的问题 292
使用Spring框架进行数据访问 293
Data Access with the Spring Framework 293
通用的数据访问异常 293
再论业务对象与数据访问对象的关系 295
JDBC 298
iBATIS SQL映射 301
JDO 302
Hibernate 304
小结 307
Summary 307
Replacing Other EJB Services 341
替换其它的EJB服务 341
线程管理 342
Thread Management 342
线程神话 342
EJB线程模型 345
EJB实例池 346
EJB Instance Pooling 346
何时需要实例池? 347
何时不需要实例池 347
EJB线程机制和缓冲池的替代方案 349
Aiternatives to EJB Threading and Pooling 349
线程模型 349
ThreadLocal“缓冲池” 357
实例池概述 358
声明性安全 359
Declarative Security 359
EJB安全模型 359
EJB模型的缺陷 359
借助AOP的声明式安全 359
JMS和消息驱动Bean 360
JMS and Message-driven Beans 360
小结 360
Summary 360
Web Tier Design 363
Web层设计 363
目标和体系结构的讨论 364
Goals and Architectural Issues 364
Web层设计目标 365
用Servlet和JSP定制的MVC 366
融入整体架构 368
硬编码连接的单例业务对象 369
请求驱动的Web MVC框架 374
Request-driven Web MVC Frameworks 374
Struts 1.1 375
WebWork2 381
Spring的Web MVC框架 388
与中间层的集成 400
适宜的视图技术 401
Web MVC的其它实现方式 403
Alternative Approaches to Web MVC 403
Portals和Portlets 403
事件驱动的Web MVC框架 404
小论ASP.NET 409
总结 410
Summay 410
Unit Testing and Testability 411
单元测试与可测试性 411
为何测试很重要? 412
Why Testing Matters 412
单元测试的目标 414
Goals of Unit Tesing 414
确保可测试性 415
Ensuring Testability 415
编程风格 415
如何让你的代码难于测试 416
来自标准库的难题 420
提高可测试性的技巧 421
依赖倒置 425
AOP 425
单元测试技巧 425
Unit Testing Techniques 425
替换 425
模仿对象 426
编写有效测试 430
测试驱动开发(TDD) 433
Test-driven Development(TDD) 433
好处 433
对TDD的反对意见 434
TDD实践 436
学习TDD 436
案例研究:Spring的经验 437
Case Study:The Spring Experience 437
测试Spring应用程序 440
Testing Spring Applications 440
对POJO进行测试 440
Spring的抽象带来的好处 440
何时需要依赖Spring API? 441
使用替换配置进行测试 442
覆盖率分析和其他测试工具 443
Coverage Analysis and Other Test Tools 443
测试生成器 444
覆盖分析工具 444
突变测试工具 447
资源 448
Resources 448
小结 449
Summary 449
Performance and Scalability 452
性能与可伸缩性 452
定义 453
Definitions 453
设置清晰的目标 454
Setting Clear Goals 454
体系结构的选择:影响性能和可伸缩性的关键因素 455
Architectural Choices:The Key to Performance and Scalability 455
对象分布、集群和农场 456
不同实现的选择 464
Implementation Choices 464
摆脱EJB服务设施对性能的影响 464
结果总结 469
缓存和代码优化 472
Caching and Code Optimization 472
代码优化,以及为何要避免它 472
缓存 473
潜在代码优化 474
调优和部署 477
Tuning and Deployment 477
JVM 477
应用服务器 477
框架配置 478
数据库配置 478
一种循证的性能策略 479
An Evidence-based Approach to Performance 479
基准测试 480
采样(Profiling) 481
诊断 485
资源 486
Resources 486
总结 486
Summary 486
The Sample Application 489
示例应用系统 489
Pet Store(宠物店)业务需求 490
Pet Store Requirements 490
iBATIS JPetStore 3.1 490
中间层 491
远程调用机制 493
可改进的空间 494
Spring JPetStore 494
中间层 496
数据访问层 499
Web层 502
远程机制 510
访问远程服务 513
编译和部署 516
Build and Deployment 516
WAR部署中的一些问题 516
资源引用 517
JSP和JSTL 518
部署Spring JPetStore 519
小结 520
Summary 520
Conclusion 521
结 语 521
回顾 522
Looking Back 522
前行 524
Moving Forward 524
指导方针 531
Guidelines 531
写在最后 536
Last Words 536
猜您喜欢