expert one-on-one J2EE Development without EJB中文版

expert one-on-one J2EE Development without EJB中文版
作 者: 詹森;赫鲁 JavaEye
出版社: 电子工业出版社
丛编项:
版权说明: 本书为出版图书,暂不支持在线阅读,请支持正版图书
标 签: J2EE
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  RodJohnson是一名企业Java架构师,在保险、电子商务和金融行业的信息化领域有丰富的经验。他是欧洲最大的门户网站之一的J2EE架构师,并且以顾问的身份参与了大量的项目。Rod在悉尼大学(UniversityofSydney)获得了音乐和计算机科学的学位。在回到软件开发领域之前,他还获得了音乐学的博士学位。他有相当深厚的C/C++技术背景,并且从Java和.J2EE发布之初就已经开始使用它们。他积极地参与到Java社群过程(JCP)之中,是JSR-154(SetMet2.4)和JDO2.0规范专家组的成员。自2000年以来,他参与写作了好几本J2EE方面的书籍,畅销书ExpertOne-on-OneJ2EEDesignandDevelopment(Wrox,2002年)便是出自他的笔下。

内容简介

这本书拥有一大堆“看点”。譬如说,它的作者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 Johnso...

图书目录

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