《精通EJB 第2版》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:(美)Ed Roman著;刘晓华等译
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2002
  • ISBN:7505380532
  • 页数:461 页
图书介绍:

第一篇 概述 3

第1章 概述 3

1.1 EJB的形成动机 3

1.2 分而置之的极点 4

1.3 组件体系结构 8

1.4 Enterprise JavaBeans(EJB)简介 9

1.4.1 为什么用Java 9

1.4.2 作为一种商务解决方案的EJB 10

1.5 EJB社区 11

1.5.1 Bean供应商 12

1.5.2 应用系统组装商 12

1.5.3 EJB系统部署员 13

1.5.4 系统管理员 13

1.5.5 容器和服务器供应商 13

1.5.6 工具供应商 14

1.5.7 角色小结 14

1.6 Java 2平台企业版 15

1.7 小结 19

第2章 EJB基础 21

2.1 Enterprise Bean 21

2.2 分布式对象:EJB基础 23

2.3 分布式对象和中间件 24

2.3.1 显式的中间件 24

2.3.2 隐式的中间件 25

2.4 企业级Bean的组成部分 26

2.4.1 Enterprise Bean类 27

2.4.2 EJB对象 27

2.4.3 Home对象 32

2.4.4 本地接口 34

2.4.5 部署描述 36

2.4.6 供应商特有文件 37

2.4.7 Ejb-jar文件 37

2.4.8 术语小结 38

2.5 小结 39

第3章 编写您的第一个Bean 41

3.1 怎样开发一个EJB组件 41

3.2 远程接口 42

3.3 本地接口 43

3.4 Home接口 44

3.5 本地Home接口 44

3.6 Bean类 46

3.7 部署描述 49

3.8 与供应商相关的特定文件 50

3.9 Ejb-jar文件 50

3.10 部署Bean 51

3.11 可选的EJB客户端的Jar文件 51

3.12 理解怎样调用Bean 52

3.13 运行系统 55

3.13.1 服务器端输出 56

3.13.2 客户端输出 56

3.14 实现组件接口 56

3.15 小结 58

第二篇 3种Bean 61

第4章 会话Bean介绍 61

4.1 会话Bean的生命周期 61

4.2 会话Bean子类型 61

4.2.1 状态会话Bean 62

4.2.2 无状态会话Bean 62

4.3 状态会话Bean的特征 63

4.3.1 对状态会话Bean实现调度池调度 63

4.3.2 对话状态遵从的规则 65

4.3.3 激活/钝化回调方法 66

4.3.4 方法实现小结 68

4.3.5 一个简单的状态会话Bean 68

4.3.6 会话Bean的生命周期图表 75

4.4 小结 78

第5章 实体Bean介绍 79

5.1 持久的概念 79

5.1.1 Java对象序列化 79

5.1.2 对象-关系型数据库映射 80

5.1.3 对象数据库 81

5.2 什么是实体Bean 82

5.3 实体Bean的特征 84

5.3.1 实体Bean可以幸免于故障 84

5.3.2 实体Bean实例是一个对应到数据库中的视图 85

5.3.3 几个实体Bean实例可能代表同一底层数据 86

5.3.4 实体Bean实例可以被收集再利用 87

5.3.5 保持实体Bean的两种方法 89

5.3.6 实体Bean的创建和删除 89

5.3.7 实体Bean可以被查找 91

5.3.8 实体Bean可以不通过EJB被修改 92

5.4 实体上下文 92

5.4.1 getEJBLocalObject()/getEJBObject() 93

5.4.2 getPrimaryKey() 93

5.5 小结 94

第6章 编写Bean管理的持久实体Bean 95

6.1 实体Bean编程基础 95

6.2 Bean管理持久的范例:一个银行账户 100

6.2.1 Account.java 101

6.2.2 AccountLocal.java 102

6.2.3 AccountHome.java 103

6.2.4 AccountLocalHome.java 104

6.2.5 AccountPK.java 105

6.2.6 AccountBean.java 106

6.2.7 AccountException.java 116

6.2.8 Client.java 117

6.2.9 部署描述 120

6.2.10 特定容器的部署描述 121

6.2.11 建立数据库 121

6.3 运行客户端程序 121

6.3.1 服务器端的输出 122

6.3.2 客户端的输出 123

6.4 融会贯通:遍历BMP实体生命周期 123

6.5 小结 125

第7章 编写容器管理的持久实体Bean 127

7.1 CMP实体Bean的特性 127

7.1.1 被继承的实体Bean 127

7.1.2 CMP实体Bean不包含声明字段 128

7.1.3 CMP的get/set方法在子类中的定义 129

7.1.4 CMP实体Bean有一个抽象的持久化模式 131

7.1.5 CMP实体Bean拥有查询语言 132

7.1.6 CMP实体Bean可以包含ejbSelect()方法 133

7.2 实现容器管理持久化的指导原则 134

7.3 容器管理持久的范例:产品系列 137

7.3.1 Product.java 137

7.3.2 ProductLocal.java 138

7.3.3 ProductHome.java 139

7.3.4 ProductLocalHome.java 140

7.3.5 ProductPK.java 141

7.3.6 ProductBean.java 142

7.3.7 部署描述 145

7.3.8 容器相关的部署描述 148

7.3.9 Client.java 149

7.4 运行客户端程序 151

7.5 CMP实体Bean的生命周期 152

7.6 小结 153

第8章 消息驱动Bean简介 155

8.1 使用消息驱动Bean的动机 155

8.2 Java消息服务 156

8.2.1 消息机制的域 157

8.2.2 Java消息服务API 158

8.3 Java消息服务同EJB的集成 162

8.4 开发消息驱动Bean 164

8.4.1 语法 164

8.4.2 一个简单示例程序 166

8.5 高级概念 171

8.6 消息驱动Bean的常见难点 173

8.6.1 消息排序 173

8.6.2 很少用到ejbRemove()调用 174

8.6.3 如何将结果返回到消息发生者 176

8.6.4 未来展望:异步方法调用 179

8.7 小结 180

第9章 给Bean增加功能 181

9.1 从其他的Bean调用Bean 181

9.1.1 默认的JNDI查找 181

9.1.2 理解EJB引用 182

9.2 资源库 184

9.3 环境属性 186

9.4 理解EJB的安全性 187

9.4.1 安全第一步:验证 188

9.4.2 安全第二步:授权 196

9.4.3 安全性的传播 203

9.5 理解EJB对象句柄 204

9.6 小结 206

第三篇 高级企业JavaBean概念 209

第10章 事务 209

10.1 事务产生的动机 209

10.1.1 原子操作 209

10.1.2 网络故障或机器故障 210

10.1.3 多用户共享数据 211

10.2 事务所带来的益处 212

10.3 事务的模型 214

10.3.1 平面式事务模型 214

10.3.2 嵌套式事务模型 215

10.3.3 其他事务模型 216

10.4 事务在EJB组件中的应用 217

10.4.1 后台事务系统的抽象分离 217

10.4.2 声明型事务、编程型事务和客户端初始化事务 217

10.4.3 选择事务的类型 220

10.5 容器管理的事务 221

10.6 EJB中的编程型事务 227

10.6.1 CORBA的对象事务处理服务(OTS) 227

10.6.2 Java事务处理服务(JTS) 227

10.6.3 Java事务处理API(JTA) 227

10.6.4 声明型事务和编程型事务的应用范例比较 230

10.7 如何使用客户代码控制事务 232

10.8 事务的隔离 233

10.8.1 并发控制的需求 233

10.8.2 隔离性与EJB的理论 234

10.8.3 不当读取问题 235

10.8.4 不可重复读取问题 236

10.8.5 幻影读取问题 237

10.8.6 事务隔离性的总结 238

10.8.7 隔离性与EJB 238

10.8.8 限制式和开放式并发控制 239

10.9 分布式事务 239

10.9.1 稳定性和两阶段提交协议 240

10.9.2 事务的通信协议和事务上下文 241

10.10 在EJB中设计事务会话 241

10.11 小结 243

第11章 BMP和CMP的关联 245

11.1 BMP和CMP的区别 245

11.2 基数性 246

11.2.1 1:1关联 247

11.2.2 1:N关联 250

11.2.3 M:N关联 254

11.3 方向性 260

11.3.1 使用BMP实现方向性 261

11.3.2 使用CMP实现方向性 262

11.3.3 方向性不可以映射到数据库模式 263

11.3.4 选择双向还是单向关联 264

11.4 惰性载入(Lazy Loading) 264

11.5 聚合-组合和级联删除 265

11.6 关联和EJB-QL 267

11.7 递归关联 268

11.8 循环关联 268

11.9 引用完整性 269

11.10 小结 272

第12章 持久化最优操作 273

12.1 何时使用实体Bean 273

12.1.1 控制 273

12.1.2 参数传递的类比 273

12.1.3 过程化(Procedural)与面向对象的对比 274

12.1.4 高速缓存 274

12.1.5 实施模式独立性 275

12.1.6 易于使用 275

12.1.7 移植 275

12.1.8 快速应用开发 275

12.2 选择CMP或是BMP 276

12.2.1 代码简化和决速应用开发 276

12.2.2 性能 276

12.2.3 调试 276

12.2.4 控制 277

12.2.5 应用程序服务器和数据库独立性 277

12.2.6 关联 278

12.2.7 学习曲线和代价 278

12.3 为实体Bean选择正确的粒度 278

12.4 持久化的提示和技巧 279

12.4.1 需要注意对象关系之间的阻抗不匹配 279

12.4.2 硬代码SQL和软代码SQL 280

12.4.3 何时使用存储过程 280

12.4.4 规范化和反规范化 282

12.4.5 使用EJB对象模型来驱动数据模型 283

12.4.6 采用最好的数据设计方法 283

12.4.7 使用代理键 283

12.4.8 理解数据库升级所带来的影响 284

12.4.9 记录EJB组件的版本 284

12.4.10 使用遗留数据库设计 285

12.4.11 随时间改变的模式 289

12.4.12 处理大结果集 290

12.5 小结 291

第13章 EJB最优操作和性能优化 293

13.1 何时使用状态Bean和无状态Bean 293

13.2 何时使用消息或者RMI-IIOP 294

13.3 如何使用负载规划保证响应时间 296

13.4 如何使用EJB实现单实例 297

13.5 交换实体Bean和会话Bean 298

13.6 性能调整实体Bean 299

13.7 选择本地接口或者远程接口 300

13.8 如何调试EJB 300

13.9 区分资源 301

13.10 装配组件 302

13.11 开发可复用组件 303

13.12 何时在EJB中使用XML 303

13.13 同EJB进行遗留集成 304

13.14 小结 306

第14章 集群服务 307

14.1 大规模系统概述 307

14.1.1 何谓大规模系统 307

14.1.2 基本术语 308

14.1.3 集群的区分 309

14.2 实现集群的EJB 312

14.2.1 如柯集群EJB组件 312

14.2.2 幂等的概念 313

14.2.3 无状态会话Bean的集群 313

14.2.4 状态会话Bean的集群 315

14.2.5 实体Bean的集群 316

14.2.6 消息驱动Bean的集群 318

14.3 其他EJB集群问题 319

14.3.1 First Contact 319

14.3.2 Initial Access Logic 320

14.4 小结 320

第15章 开始EJB项目 321

15.1 确定商务需求 321

15.2 确定J2EE是否适合您的项目 321

15.3 确定EJB是否合适 322

15.4 确定项目开发人员 324

15.5 设计完整的对象模型 325

15.6 实现单个垂直薄片(Vertical Slice) 326

15.7 选择应用服务器 327

15.8 划分开发小组 327

15.9 投资开发工具 329

15.10 投资标准建立方法 329

15.11 小结 330

第16章 选择EJB服务器 331

16.1 J2EE 1.3商标 331

16.2 可插入式JRE 331

16.3 转换工具 332

16.4 复杂映射 332

16.5 第三方JDBC驱动程序的支持 332

16.6 惰性载入 332

16.7 延迟数据库写入 332

16.8 可插入式持久化供应商 333

16.9 内存中数据的缓存 333

16.10 集成层次的支持 333

16.11 可伸缩性 333

16.12 高可用性 334

16.13 安全性 334

16.14 IDE集成 334

16.15 UML编辑器的集成 335

16.16 智能负载平衡 335

16.17 无状态透明的失败转发 335

16.18 集群 336

16.19 Java管理扩展(JMX) 336

16.20 管理支持 336

16.21 热部署(Hot Deployment) 336

16.22 实例组合 337

16.23 自动EJB生成 337

16.24 合理地关机 337

16.25 实时部署 337

16.26 分布式事务处理 338

16.27 高级消息体系结构 338

16.28 可选的EJB组件 338

16.29 J2EE连接器体系结构(JCA) 338

16.30 Web服务 339

16.31 工作流程 339

16.32 开放源代码 340

16.33 专业化的服务 340

16.34 非技术标准 340

16.35 小结 341

第17章 EJB-J2EE的集成:创建一个完整的应用 343

17.1 商务问题 343

17.2 最终网站预览 344

17.3 技术需求 346

17.3.1 商务逻辑层的对象模型 346

17.3.2 产品 347

17.3.3 顾客 348

17.3.4 购物篮 348

17.3.5 购物篮条目 349

17.3.6 估价器 349

17.3.7 订单 349

17.3.8 订单条目 350

17.3.9 订单处理器 350

17.4 表达层的对象模型 351

17.4.1 何谓Servlet 351

17.4.2 何谓JavaServer Pages 353

17.4.3 如何组合Servlet、JSP和EJB组件 353

17.4.4 电子商务部署中的JSP 355

17.5 示例代码 356

17.6 小结 361

第四篇 附录 365

附录A RMI-IIOP和JNDI教程 365

A.1 Java RMI-IIOP 365

A.1.1 远程方法调用 366

A.1.2 远程接口 367

A.1.3 远程对象实现 368

A.1.4 根程序和程序框架 370

A.2 对象序列化和参数传递 371

A.2.1 值传递 371

A.2.2 对象序列化 371

A.2.3 序列化规则 372

A.2.4 怎样标识暂态 373

A.2.5 对象序列化和RMI-IIOP 373

A.3 Java命名和目录接口(JNDI) 376

A.3.1 命名和目录服务器 376

A.3.2 命名和目录的问题 378

A.3.3 进入JNDI 378

A.3.4 JNDI的优点 378

A.3.5 JNDI的结构体系 379

A.3.6 JNDI概念 380

A.3.7 命名系统、命名空间和合成命名 381

A.3.8 初始上下文生成库 382

A.3.9 JNDI编程 383

A.4 RMI-IIOP和JNDI的集成 384

A.4.1 将RMI-II0P服务器绑定到JNDI 385

A.4.2 使用JNDI查询RMI-IIOP服务器 386

A.5 小结 387

附录B CORBA协同工作 389

B.1 何谓CORBA 389

B.2 为何要关心CORBA 390

B.3 理解CORBA是如何工作的 391

B.4 OMG的接口定义语言 392

B.4.1 将OMG IDL映射成具体的语言 393

B.4.2 CORBA静态调用 394

B.5 CORBA提供的众多服务 395

B.6 对RMI-IIOP的需求 395

B.6.1 RMI-CORBA协同工作的需求 395

B.6.2 RMI与CORBA的结合 397

B.6.3 解决RMI和CORBA之间的差别 398

B.7 RMI与CORBA的协同工作综述 400

B.7.1 带有CORBA对象实现的RMI-IIOP客户 400

B.7.2 带有RMI-IIOP对象实现的CORBA客户 400

B.7.3 RMI-IIOP和CORBA的引导程序 401

B.7.4 美好的前景:CORBA与EJB的结合 401

B.7.5 不能从CORBA-EJB协同工作中获得 402

B.7.6 范例代码 402

B.8 小结 404

附录C 部署描述符参考 405

C.1 如何阅读DTD 405

C.2 Header和Root元素 405

C.3 定义会话Bean 407

C.4 定义实体Bean 408

C.4.1 <entity> 409

C.4.2 <cmp-field> 410

C.4.3 <query> 410

C.4.4 <query-method> 410

C.4.5 <method-params> 411

C.5 定义消息驱动Bean 411

C.5.1 <message-driven> 411

C.5.2 <message-driven-destination> 412

C.6 定义环境属性 413

C.7 定义EJB引用 413

C.7.1 <ejb-ref> 414

C.7.2 <ejb-local-ref> 415

C.8 定义安全性 415

C.8.1 <security-role-ref> 415

C.8.2 <security-identity> 416

C.8.3 <run-as> 416

C.9 定义资源工厂 416

C.9.1 <resource-ref> 417

C.9.2 <resource-env-ref> 417

C.10 定义关联 418

C.10.1 <relationships> 419

C.10.2 <ejb-relation> 419

C.10.3 <ejb-relationship-role> 419

C.10.4 <relationship-role-source> 420

C.10.5 <cmr-field> 420

C.10.6 定义装配描述符 420

C.10.7 <assembly-descriptor> 421

C.10.8 <security-role> 422

C.10.9 <method-permission> 422

C.10.10 <container-transaction> 422

C.10.11 <exclude-list> 423

C.10.12 <method> 423

C.10.13 <method-params> 423

附录D EJB查询语言 425

D.1 概述 425

D.1.1 一个简单示例 425

D.1.2 关联的作用 427

D.2 EJB-QL语法 427

D.2.1 FROM语句 427

D.2.2 WHERE语句 429

D.2.3 执行比较操作 431

D.2.4 SELECT语句 431

D.2.5 真值表 434

D.3 小结 435

附录E EJB快速索引向导 437

E.1 EJB API索引 447

E.1.1 EJBContext 447

E.1.2 EJBHome 448

E.1.3 EJBLocalHome 448

E.1.4 EJBLocalObject 449

E.1.5 EJBMetaData 450

E.1.6 EJBObject 450

E.1.7 EnterpriseBean 451

E.1.8 EntityBean 451

E.1.9 EntityContext 454

E.1.10 Handle 455

E.1.11 HomeHandle 455

E.1.12 MessageDrivenBean 456

E.1.13 MessageDrivenContext 456

E.1.14 SessionBean 456

E.1.15 SessionContext 458

E.1.16 SessionSynchronization 458

E.2 异常索引 459

E.3 事务索引 460