第1章 EJB知识与运行环境配置 1
1.1 什么是EnterpriceJavaBeans(EJB) 1
1.2 EJB的运行环境 1
1.3 什么是JNDI 2
1.4 下载与安装JDK 2
1.5 下载与安装Eclipse 3
1.6 下载与安装JBoss 3
1.7 运行第一个EJB3.0例子 5
1.8 熟悉JBoss的目录结构 5
1.9 在JBoss部署应用 6
1.10 如何恢复本书配套例子的开发环境 7
1.11 执行项目中的Ant任务 9
1.12 运行单元测试用例 10
第2章 会话Bean(SessionBean) 11
2.1 StatelessSessionBeans(无状态Bean)开发 11
2.1.1 开发只实现Remote接口的无状态SessionBean 12
2.1.2 开发只实现Local接口的无状态SessionBean 23
2.1.3 开发实现了Remote与Local接口的无状态SessionBean 25
2.2 实例池化(InstancePooling) 27
2.3 StatelessSessionBean的生命周期 28
2.4 StatefulSessionBean(有状态Bean)开发 30
2.5 激活机制(ActivationMechanism) 32
2.6 StatefulSessionBean的生命周期 34
2.7 EJB调用机制 35
2.8 如何改变SessionBean的JNDI名称 36
2.9 SessionBean的生命周期事件 38
2.10 拦截器(Interceptor) 41
2.11 依赖注入(DependencyInection) 47
2.11.1 资源类型的注入 54
2.11.2 注入与继承关系 57
2.11.3 自定义注入注释 58
2.12 定时服务(TimerService) 63
2.13 安全服务(SecurityService) 65
第3章 实体Bean(EntityBean) 80
3.1 JBoss数据源的配置 80
3.1.1 MySQL数据源的配置 81
3.1.2 MSSQLServer2000数据源的配置 82
3.1.3 Oralce9i数据源的配置 82
3.2 单表映射的实体Bean 83
3.3 成员属性映射 98
3.4 建议重载实体Bean的equals()和hashCode()方法 103
3.5 映射的表名或列名与数据库保留字同名时的处理 104
3.6 多表映射的实体Bean 104
3.7 持久化实体管理器EntityManager 110
3.7.1 实体的状态 120
3.7.2 Entity获取fmd()或getReference() 121
3.7.3 持久化实体persist() 122
3.7.4 更新实体 122
3.7.5 合并merge() 123
3.7.6 删除remove() 124
3.7.7 执行JPQL操作createQue() 125
3.7.8 执行SQL操作createNativeQue() 125
3.7.9 刷新实体refresh() 126
3.7.10 检测实体是否处于托管状态contains() 126
3.7.11 分离所有正在托管的实体clear() 127
3.7.12 刷新flush()与设置flush模式setFlushMode() 127
3.7.13 获取持久化实现者的引用getDelegateO 130
3.8 关系/对象映射 130
3.8.1 双向一对多及多对一映射 130
3.8.2 单向一对多 142
3.8.3 单向多对一 146
3.8.4 双向一对一映射 150
3.8.5 单向一对一 159
3.8.6 双向多对多映射 163
3.8.7 单向多对多 173
3.9 JPQL查询 177
3.9.1 命名参数查询 179
3.9.2 位置参数查询 179
3.9.3 Date参数 180
3.9.4 一个JPQL查询例子 180
3.9.5 命名查询 193
3.9.6 排序(orderby) 193
3.9.7 查询部分属性 194
3.9.8 查询中使用构造器(Constructor) 194
3.9.9 聚合查询(Aggregation) 195
3.9.10 关联(join) 197
3.9.11 排除相同的记录DISTINCT 199
3.9.12 比较Entity 200
3.9.13 批量更新(BatchUpdate) 200
3.9.14 批量删除(BatchRemove) 201
3.9.15 逻辑非运算符NOT 201
3.9.16 使用操作符BETWEEN 202
3.9.17 使用操作符IN 202
3.9.18 使用操作符LIKE 203
3.9.19 使用操作符ISNULL 203
3.9.20 使用操作符ISEMPTY 204
3.9.21 字符串函数 204
3.9.22 日期和时间函数 205
3.9.23 数学函数 206
3.9.24 Memberof 206
3.9.25 子查询 207
3.9.26 EXISTS 207
3.9.27 All、ANY、SOME 208
3.9.28 结果集分页 209
3.10 调用存储过程 210
3.10.1 调用无返回值的存储过程 211
3.10.2 调用返回单值的存储过程 211
3.10.3 调用返回表全部列的存储过程 212
3.10.4 调用返回部分列的存储过程 213
3.11 复合主键(CompositePrimaryKey) 214
3.11.1 复合主键的定义 214
3.11.2 另一种复合主键的定义方式 223
3.12 实体继承 227
3.12.1 每个类分层结构一张表(tableperclasshierarchy) 227
3.12.2 每个子类一张表(tablepersubclass) 233
3.12.3 每个具体类一张表(tableperconcreteclass) 236
3.13 Entity的生命周期和状态 239
3.13.1 生命周期回调事件 240
3.13.2 在外部类中实现回调 241
3.13.3 在Entity类中实现回调 245
第4章 事务管理服务 249
4.1 容器管理事务(CMT) 250
4.2 Bean管理事务(BMT) 270
4.3 事务并发的问题与处理 279
4.3.1 事务并发的问题 279
4.3.2 事务并发的处事 281
4.4 因并发事务引起的更新丢失问题及处理 286
4.4.1 使用SERIALIZABLE隔离级别避免更新丢失 294
4.4.2 修改代码逻辑来避免更新丢失 297
4.4.3 使用悲观锁避免更新丢失 300
4.4.4 使用乐观锁避免更新丢失 305
第5章 消息服务(JavaMessageService) 311
5.1 消息驱动Bean(MessageDrivenBean) 313
5.2 Queue消息的发送与接收(PTP消息传递模型) 314
5.3 Topic消息的发送与接收(Pub/sub消息传递模型) 322
5.4 消息选择器(Messageselector) 326
第6章 Web服务(WebService) 328
6.1 EJB容器模型的WebService开发 328
6.2 Web容器模型的WebService开发 339
6.3 WebService的客户端调用 341
6.3.1 在J2SE或Web中调用WebService 341
6.3.2 在EJB中调用WebService 343
第7章 在WebLogic中使用EJB3.0. 347
7.1 WebLogic的安装 347
7.2 启动WebLogicExamples服务器 350
7.3 熟悉WebLogic的管理控制台 350
7.4 关闭WebLogicExamples服务器 353
7.5 安装与删除企业应用 354
7.6 安装与删除EJB模块 357
7.7 安装与删除Web应用 359
7.8 安装和引用JavaEE共享库 361
7.9 使用Ant发布与卸载应用 363
7.10 创建JDBC数据源 364
7.11 WebLogic的JNDI名称 367
7.12 HelloWorld例子 370
7.13 EntityBean应用例子 375
7.14 Message-DrivenBean应用例子 384
7.14.1 创建队列 384
7.14.2 创建主题 388
7.14.3 队列消息的发送与接收 389
7.14.4 主题消息的发送与接收 392
第8章 Struts+EJB3.0和JSF+EJB3.0实战 397
8.1 系统需求 397
8.2 系统实现 398
8.2.1 建立实体模型 399
8.2.2 建立持久化配置文件 404
8.2.3 建立会话Bean 405
8.2.4 Struts客户端 410
8.2.5 JSF客户端 431
8.2.6 创建EAR部署描述文件 452
8.2.7 使用Ant构建和部署程序 453
第9章 项目实用知识 458
9.1 使用了第三方类库的企业应用 458
9.2 如何对EJB3进行调试 458
9.3 单元测试 464
9.4 在独立的Web服务器或J2SE中调用EJB 468
9.5 如何获取最新的JBoss版本 478