Enterprise JavaBeans(EJB)是用于开发和部署商业应用程序的分布式组件模型。EJB 2.0是 EJB l.l的一次重要升级,它可以用来构建可伸缩、可重用、可移植事务性和分布式企业级商业应用程序。
本书介绍了J2EE 1.3和 EJB 2.0的基本理论以及使用EJB 2.0开发商业应用程序的具体方法、规则,并通过大量的具体工程实例,指导读者学习EJB开发的过程与细节。最后,本书还集中讨论了如何实现EJB事务、EJB安全性、EJB设计模式和由 EJB 1.1迁移到EJB 2.0的策略等问题。
本书特别适用于编写EJB程序的新手和学习如何在 EJB 2.0中编写业务逻辑的 EJB 1.1程序员。本书读者应具备一定的Java编程经验,并对HTML、servlet、JSP、SQL、rmi与JDBC等知识有一定的了解。
第1部分 概述
第1章 Java 2 Enterprise Edition 1.3简介
1.1 企业计算的演化
1.2 对企业计算的考虑
1.3 企业计算平台
1.3.1 CORBA
1.3.2 .NET
1.3.3 J2EE
1.4 J2EE 1.3所需的技术
1.4.1 支持通信的技术
1.4.2 支持安全的技术
1.4.3 支持表示的技术
1.4.4 支持业务应用的技术
1.4.5 支持企业信息系统的技术
1.4.6 将所有的内容整合到一起
1.5 J2EE体系结构
1.5.1 客户层
1.5.2 表示层
1.5.3 业务层
1.5.4 企业信息系统层
1.6 J2EE体系结构技术上的优点
1.6.1 互操作性
1.6.2 与遗留系统的标准集成
1.6.3 编程的效率
1.6.4 分布式组件
1.6.5 可靠性和性能
1.6.6 安全
1.6.7 将开发和部署的复杂性减到最少
1.7 J2EE体系结构与商业相关的优点
1.7.1 简化应用程序开发
1.7.2 选择的自由
1.7.3 较快的上市时间
1.7.4 较低的开发代价
1.7.5 应用程序的易管理性
1.7.6 应用程序的可移植性
1.8 J2EE开发和部署角色
1.9 开发一个J2EE应用程序
1.10 J2EE的缺点
1.10.1 陡峭的学习曲线
1.10.2 较高的资源要求
1.10.3 J2EE应用服务器的费用(较高的基础结构费用)
1.10.4 较高的维护费用
1.10.5 避免使用J2EE的场合
1.11 本章小结
第2章 Enterprise JavaBeans 2.0简介
2.1 软件组件模型
2.2 Enterprise JavaBeans体系结构
2.2.1 Enterprise JavaBeans组件
2.2.2 关键EJB元素
2.2.3 EJB容器
2.2.4 打包和部署工具
2.3 EJB安全
2.4 EJB的优点
2.5 EJB的缺点
2.6 Enterprise JavaBeans和JavaBeans的区别
2.7 本章小结
第2部分 开发EJB
第3章示 例应用程序概述
3.1 命名约定
3.2 关于例程源代码
3.3 数据库表
3.4 示例应用程序描述
3.4.1 无状态会话beau实例
3.4.2 有状态会话 beau 示例
3.4.3 BMP实体 beau 示例
3.4.4 CMP实体 beau 示例
3.4.5 消息驱动 beau实现示例
3.5 本章小结
第4章 EJB客户视图
4.1 分布式对象
4.1.1 分布式对象的难点
4.1.2 解决方案
4.2 JNDI简介
4.2.1 命名服务
4.2.2 命名约定
4.2.3 命名空间
4.2.4 目录服务
4.2.5 命名和目录服务的需求
4.3 客户程序的JNDI
4.3.1 访问远程对象
4.3.2 设置JNDI环境属性
4.4 JNDI和 EJB
4.4.1 利用JNDI访问数据源
4.4.2 上下文命名约定
4.5 RMI-IIOP简介
4.5.1 远程调用中RMI的优点
4.5.2 RMI-IIOP的优势
4.5.3 使用RM1-11OP的强制转换要求
4.6 EJB客户视图
4.7 远程和本地接口
4.7.1 远程接口
4.7.2 本地接口
4.8 本地和远程接口API
4.8.1 远程 Home接口
4.8.2 本地 Home接口
4.8.3 远程组件接口
4.8.4 本地组件接口
4.8.5 异常
4.9 远程和本地接口的编写规则
4.10 创建远程客户程序
4.10.1 创建远程Home接口
4.10.2 创建远程组件接口
4.10.3 创建远程客户应用程序
4.11 编译执行 He11o Wor1d
4.12 打包 He11o Wor1d程序
4.12.1 打包文件
4.12.2 打包客户:He11oC1ient
4.12.3 He11oC1ient和 He11oBean的交互作用
4.13 使用本地和远程接口
4.14 程序性能
4.15 本章小结
第5章 会话beau简介
5.1 会话beau的特性
5.2 会话beau的类型
5.2.1 无状态会话beau(S1SB)
5.2.2 有状态会话beau(SFSB)
5.3 会话beau 元素
5.3.1 会话beau实现类
5.3.2 SessionBean接口
5.3.3 SessionContext接口
5.3.4 助手类
5.3.5 部署描述符
5.4 编写会话beau的规则和要求
5.4.1 编写会话beau类的规则和要求
5.4.2 编写ejbCreate<Method>(…)方法的规则
5.4.3 编写业务方法的规则
5.5 实现会话beau时部署工具的作用
5.6 打包会话beau
5.7 部署
5.8 本章小结
第6章 开发无状态会话beau
6.1 无状态会话beau的特征和特性
6.2 无状态会话beau的生命周期
6.3 无状态课程表beau应用程序
6.3.1 步骤1:实现 S1SB远程 Home接口
6.3.2 步骤2:实现S1SB远程组件接口
6.3.3 步骤3:实现S1SB类
6.3.4 步骤4:实现助手类
6.3.5 步骤5:编译Schedu1eHome.Schedu1e.Schedu1eEJB.Schedu1eDAO和Schedu1eVO
6.3.6 步骤6:编写并编译Serv1et客户
6.3.7 步骤7:创建HTM1表单页面
6.3.8 步骤8:将课程表应用程序创建成企业归档文件
6.3.9 步骤 9:将 S1SB Schedu1eEJB打包成ejb-jar文件
6.3.10 步骤10:打包Web归档文件
6.3.11 步骤11:部署课程表应用程序
6.3.12 步骤12:检查部署描述符
6.3.13 步骤13:运行课程表企业应用程序
6.4 本章小结
第7章 开发布状态会话beau
7.1 SFSB的特征
7.2 什么时候使用SFSB
7.3 SFSB的生命周期
7.4 购物车应用程序的实现
7.4.1 步骤1:实现远程home接口
7.4.2 步骤2:实现组件接口
7.4.3 步骤3:实现SFSB类
7.4.4 步骤 4:编译 shoPPingCartHome.shoppingCart和 ShoppingCartEJB
7.4.5 步骤5:编写和编译ShopphgCartC1ient Serv1et
7.4.6 步骤6:创建JSP页面和HTM1文件
7.4.7 步骤7:打包购物车应用程序
7.4.8 步骤8:打包War文件
7.4.9 步骤9:部署描述符
7.4.10 步骤10:部署 ShoppingCartAppear
7.4.11 步骤11:测试程序
7.5 本章小结
第8章 实体beau简介
8.1 概述
8.2 实体beau的特性
8.3 实体beau的类型
8.4 实体beau的生命周期
8.4.1 "不存在"状态
8.4.2 "入池"状态
8.4.3 "就绪"状态
8.5 实体beau元素
8.5.1 home接口和组件接口
8.5.2 主键类
8.5.3 实体beau类API
8.6 实现实体beau类的规则
8.7 方法实现的规则
8.7.1 实现ejbCreate和ekbPostCreate方法的规则
8.7.2 实现ejbFinder方法的规则
8.7.3 实现ejbHome方法的规则
8.7.4 实现业务方法的规则
8.8 BMP实体beau与CMP实体beau的比较
8.9 实体beau中的并发访问
8.10 会话beau与实体 beau之间的区别
8.11 对象标识.句柄和主键
8.12 CMP 2.0实体 beau中的新特性
8.13 本章小结
第9章 开发托管beau式实体beau
9.1 BMP的特性
9.1.1 什么时候使用BMP
9.1.2 使用 BMP的动机
9.2 托管beau式持久性
9.2.1 bean实例生命周期管理方法
9.2.2 持久性数据同步方法
9.2.3 Poo1方法
9.3 BMP应用程序示例
9.3.1 步骤1:创建home接口
9.3.2 步骤2:创建远程组件接口
9.3.3 步骤3:创建实体 beau实现类
9.3.4 步骤4:实现助手类
9.3.5 步骤5:编译接口.实体beau类和助手类
9.3.6 步骤6:使用远程接口编写一个serv1et客户程序
9.3.7 步骤7:编译serv1et客户
9.3.8 步骤8:创建HTM1表单和JSP文件
9.3.9 步骤9:打包Web组件
9.3.10 步骤10:打包Web与Enterprise组件
9.3.11 步骤11:部署 studentApp.ear文件
9.3.12 步骤12:测试该BMP实体比an学生注册应用程序
9.4 本章小结
第10章 CMP 2.0:抽象持久性模式和 EJB Q1
10.1 CMP 2.0实体beau的体系结构
10.1.1 抽象访问器方法
10.1.2 抽象持久性模式
10.1.3 托管容器式持久性域
10.1.4 托管容器式关系域
10.1.5 持久性数据访问层
10.2 EJB Q1语言
10.2.1 EJB Q1查询语法
10.2.2 查找器方法
10.2.3 tibSe1ect方法
10.2.4 查找器方法与ejbse1ect方法之间的差别
10.2.5 EJB Q1的一些问题
10.3 CMP实体beau回调方法
10.3.1 bean生命周期管理方法
10.3.2 持久性数据同步方法
10.3.3 pooI方法
10.3.4 业务方法
10.4 编写CMP 2.0实体beau类的规则
10.5 编写抽象访问器方法的规则
10.6 编写相关值类的规则
10.7 编写ejbse1ect方法的规则
10.8 在CMP beau开发过程中的责任
10.8.1 bean开发人员
10.8.2 部署工具
10.8.3 beau部署商
10.9 BMP与CMP实体beau的比较
10.10 CMP 2.0实体beau的主键
10.11 本章小结
第11章 开发 CMP 2.0实体 beau
11.1 CMP 2.0实体 beau的特征
11.2 CMP实体 beau较 BMP实体 beau的优点
11.3 CMP 2.0实体 beau的应用程序示例
11.3.1 步骤1:实现 CMP 2.0地址实体 beau
11.3.2 步骤2:实现 CMP 2.0花名册实体 beau
11.3.3 步骤3:实现 CMP 2.0学生实体 beau
11.3.4 步骤4:实现 JSP客户来测试 CMP 2.0实体 beau
11.3.5 步骤5:将 CMP 2.0实体 beau打包为 ejbdar文件
11.3.6 步骤6:将 JSP打包为 Web组件
11.3.7 步骤7:部署 CMP 2.0实体 beau应用程序例子
11.3.8 步骤8:测试应用程序例子
11.4 部署描述符
11.5 本章小结
第12章 Java消息服务
12.1 Java消息服务简介
12.2 JMS体系结构
12.2.1 JMS客户
12.2.2 JMS提供者
12.2.3 管理对象
12.2.4 JMS消息
12.3 通信域模型
12.3.1 点到点模型
12.3.2 出版和订阅模型
12.3.3 消息传送
12.3.4 可保证的消息传送
12.3.5 松耦合和异步通信
12.4 JMS编程模型
12.5 JMS与EJB的集成
12.6 本章小结
第13章 开发消息驱动beau
13.1 MDB的特征
13.2 MDB的元素
13.2.1 MessageDrivenBean接口
13.2.2 JMS消息类型
13.3 MDB的生命周期
13.4 MDB与会话和实体 beau的比较
13.5 编写MDB类及其方法的规则
13.5.1 MDB类
13.5.2 ejbCreate方法
13.5.3 onMessape()方法
13.5.4 ejdbRemove()方法
13.6 MDB EJB示例应用程序:RostetMDB
13.6.1 步骤1:定义和实现消息
13.6.2 步骤2:实现MDB类
13.6.3 步骤3:实现助手类
13.6.4 步骤4:编译RostetMDB.RosterDAO和RosterVO
13.6.5 步骤5:编写Serv1et JMS客户MessageSender
13.6.6 步骤6:实现JMS客户Durab1eSubscriber
13.6.7 步骤7:编译JMS客户
13.6.8 步骤8:打包EJB组件
13.6.9 步骤9:打包Web组件
13.6.10 步骤10:将客户打包成Jar文件
13.6.11 步骤11:部署应用程序
13.6.12 步骤12:测试程序
13.7 RosterApp部署描述符
13.8 本章小结
第3部分 高级专题
第14章 事务
14.1 事务及其好处简介
14.1.1 事务方法和伪代码
14.1.2 失效的影响
14.1.3 事务的类型
14.1.4 事务的好处
14.1.5 事务的参与者
14.2 事务模型
14.2.1 本地事务
14.2.2 分布式事务
14.2.3 两阶段提交
14.3 事务的ACID属性
14.4 事务属性
14.4.1 NotSupported
14.4.2 Required
14.4.3 Supports
14.4.4 RequiresNew
14.4.5 Mandatory
14.4.6 Nerver
14.5 通过编程或者声明实现事务
14.5.1 通过编程划分事务
14.5.2 通过声明划分事务
14.6 SFSB.BMP和CMP实体beau的事务行为
14.6.1 有状态会话beau
14.6.2 CMP 2.0实体 beau
14.6.3 BMP实体 beau
14.7 启动事务
14.7.1 客户启动的事务
14.7.2 未规定的事务上下文
14.8 托管beau式和托管容器式事务划分的比较
14.9 隔离级别
14.9.1 脏读
14.9.2 读值不可复现
14.9.3 幻像读
14.9.4 设置隔离级别
14.9.5 隔离级别的限制
14.10 事务角色及其职责
14.11 本章小结
第15章 Enterprise JavaBean安全
15.1 理解EJB安全模型
15.2 实现EJB安全的角色
15.3 通过声明实现安全
15.3.1 安全角色
15.3.2 方法许可
15.3.3 安全身份的传递
15.4 通过编程实现安全
15.4.1 检查调用者的身份
15.4.2 检查许可
15.4.3 连接安全角色引用和安全角色
15.4.4 部署
15.5 声明安全和编程安全的比较
15.6 实现资源管理器安全
15.6.1 容器初始化认证
15.6.2 应用初始化认证
15.7 安全的可用性及其限制
15.7.1 bean类型的安全可用性
15.7.2 EJB客户安全限制
15.8 安全互操作性
15.9 实现安全过程中的角色和职责
15.9.1 bean开发人员
15.9.2 应用程序装配商
15.9.3 应用程序部署商
15.9.4 系统管理员
15.9.5 EJB容器提供商
15.10 本章小结
第16章 EJB设计模式.互操作性和性能
16.1 EJB设计模式简介
16.1.1 EJB设计模式和EIS层
16.1.2 选择一种EJB设计模式
16.2 数据访问对象
16.2.1 背景
16.2.2 问题
16.2.3 用途
16.2.4 解决方案
16.2.5 结构
16.2.6 参与者及其职责
16.2.7 策略
16.2.8 后果
16.2.9 相关模式
16.3 值对象
16.3.1 背景
16.3.2 问题
16.3.3 用途
16.3.4 解决方案
16.3.5 结构
16.3.6 参与者及其职责
16.3.7 策略
16.3.8 后果
16.3.9 相关模式
16.4 值对象装配器
16.4.1 背景
16.4.2 问题
16.4.3 用途
16.4.4 解决方案
16.4.5 结构
16.4.6 参与者及其职责
16.4.7 策略
16.4.8 后果
16.4.9 相关模式
16.5 值列表处理程序
16.5.1 背景
16.5.2 问题
16.5.3 用途
16.5.4 解决方案
16.5.5 结构
16.5.6 参与者及其职责
16.5.7 策略
16.5.8 后果
16.5.9 相关模式
16.6 服务定位器
16.6.1 背景
16.6.2 问题
16.6.3 用途
16.6.4 解决方案
16.6.5 结构
16.6.6 参与者及其职责
16.6.7 策略
16.6.8 后果
16.6.9 相关模式
16.7 会话外观
16.7.1 背景
16.7.2 问题
16.7.3 用途
16.7.4 解决方案
16.7.5 结构
16.7.6 参与者及其职责
16.7.7 策略
16.7.8 后果
16.7.9 相关模式
16.8 业务代表
16.8.1 背景
16.8.2 问题
16.8.3 用途
16.8.4 解决方案
16.8.5 结构
16.8.6 参与者及其职责
16.8.7 策略
16.8.8 后果
16.8.9 相关模式
16.9 附加的模式
16.10 EJB互操作性
16.10.1 远程调用的互操作性
16.10.2 事务的互操作性
16.10.3 命名互操作性
16.10.4 安全互操作性
16.11 EJB性能问题
16.12 本章小结
第17章 将 EJB 1.1应用程序迁移到 EJB 2.0容器中
17.1 迁移选项和方式
17.1.1 重新将EJB 1.1应用程序部署到EJB 2.0容器中
17.1.2 使用适当的本地接口取代远程接口
17.1.3 重新设计应用程序以充分利用EJB 2.0
17.2 EJB 1.1的缺点
17.2.1 会话beau
17.2.2 实体beau
17.2.3 托管beau式持久性实体beau
17.2.4 托管容器式持久性实体beau
17.2.5 生命周期
17.2.6 消息驱动beau
17.2.7 EJB服务器之间的最少互操作性
17.3 将EJB 1.1应用程序迁移到EJB 2.0容器中
17.3.1 EJB 1.1实现
17.3.2 EJB 1.1部署描述符
17.4 EJB 2.0实现
17.5 CMP 2对部署描述符
17.6 带有本地接口的实体beau与相关值对象
17.7 本章小结
第18章 装配J2EE在线注册应用程序
18.1 设计目标
18.2 使用设计模式
18.2.1 服务定位器设计模式
18.2.2 会话外观设计模式
18.2.3 业务代表设计模式
18.2.4 数据访问设计模式
18.3 重构现有的EJB
18.3.1 无状态会话beau
18.3.2 有状态会话beau
18.3.3 CMP 2.0实体beau
18.3.4 消息驱动beau
18.3.5 serv1et客户
18.4 装配和部署应用程序
18.5 本章小结
18.6 最后的思考
附录
A.1 安装要求
A.2 简要的安装概述
A.3 设置开发环境
A.4 设置应用环境
A.5 使J2SDKEE做好操作准备
什么是 Enterprise JavaBean(EJB)
如果您选择了这本书, 并且正在读这一页, 则很有可能是因为您对Enterprise JavaBean(EJB). Java 2 Enterprise Edition或者Java感到好奇或者有兴趣. 或许您也可能喜欢站在乞力马扎罗山瀑布下面那只可爱的长颈鹿, 想知道在一本J2EE书的封面上的长颈鹿在做什么吗?
这是一本关于Enterprise JavaBean 2.0的书. EJB是用来构建可伸缩的. 可重用的. 可移植的. 事务性和分布式企业级商业应用程序的组件模型. 设计良好的EJB能够封装分散的业务逻辑, 并且这些封装了不同类型业务逻辑的EJB可以被装配成一个完整的商业应用程序. 例如您可以采用实现了用户身份验证. 信用卡授权. 购物车. 订单执行. 商品清单管理和客户关系管理等任务的分散的EJB, 并且将这些EJB装配成一个集成的应用程序, 然后将其放置在Web前端. 这样, 您便有了一个电子商务平台, 并可以准备初始的公开证券销售(Initial Public Offering, IPO)(这种情形在1999年的后期和2000年的早期是真实的), 然后便可以在硅谷买一套双卧室的房子. 我们将不会担心以后的盈利能力.
为什么要买这本书
现在有很多关于EJB的好书, 作者也相信以后将会有更多的关于EJB的好书. 大部分的EJB书籍可以分成两种基本类别——单独的关于EJB的书和试图面面俱到的书. 前者的内容仅仅集中在EJB上, 尽管写得很好, 但是却缺乏内容, 而后者试图在一本大部头的书中涉及所有的方面——J2EE的所有内容. CORBA, 甚至(在一些情况下)COM/DCOM. 这类图书的内容尽管范围很广, 但却缺乏深度.
本书是一套三卷本丛书中的第一本, 本书的内容主要集中在如何实现 EJB 2. 0的实践方面. 本书试图在与Java 2 EnterPrise Edition平台相关的范围较广的内容上维持宽度和深度的平衡. 本书包含了作者独特的观点, 而这些独特的观点来自作者作为一名J2EE开发人员和以前为Netscape公司而现在为Sun公司讲授如何开发J2EE应用程序的经验. 这套丛书中的第二本书Developing Web Components and Web services的内容将要集中在 J2EE技术的表现和用户交互方面. 第三本书(现在尚未命名)将会关注J2EE的基础结构方面的内容. 总之, 这三本书将会向您提供编写健壮的J2EE应用程序所需要的实际经验.
您可能会有这样的疑问:“我为什么要买这本书呢?”. 下面是一些原因(当然是作者认为的原因), 但您是评判人.
全面掌握 EJB
让我们面对这样的事实:EJB具有一条陡峭的学习曲线. 实现EJB应用程序是复杂的, 并且知道如何编写EJB组件只完成了这项挑战的一半. 在编写和编译完EJB组件之后, 您还需要打包. 装配, 然后部署EJB组件——这对于一名开发EJB的新手来说是一件繁琐的事情. 不像大部分的EJB书籍, 本书不仅有讨论理论. API和编写各种类型EJB和它们的方法的章节, 还有一些独立的章节, 这些章节讨论打包和部署阶段的逐步实现的细节, 以及如何运行实例应用程序的信息. 这些信息包括完整的大量的图表和各个步骤的屏幕截图, 来指导您成功地完成每一类型的EJB. 如果作者的这种教师引导式的培训经验具有指导意义的话, 那么大部分开发EJB的新手都会欣赏作者的这种努力, 作者努力地向您阐释了如何“跑到完整的九码”(一条橄榄球运动的术语), 换句话说就是, 如何实现一套完整的解决方案.
考虑到您的能力
编写这样一本书的一个艰巨任务就是如何设定示例应用程序的难度级别. 一方面, 示例应用程序不能太长和太复杂, 否则它们将会把您的注意力由基本的EJB概念分散到解决复杂和精巧的算法上. 而另外一方面, 示例应用程序又不能太简单, 否则将只会对学习过程有少量的价值, 甚至是没有价值. 作者的观点是考虑到您的能力, 并且不需要您增加阅读太复杂的例子的精力, 所以作者采取了一条中间路线. 示例应用程序既不很复杂和很长, 也不过分简单化, 这样您就可以将自己的精力集中到EJB的基础概念上. 一旦您掌握了这些概念, 您便可以采用示例应用程序, 将它们添加到自己的应用程序中, 以增加现实世界中的商业复杂性. 本书中大部分的例子实现的是每个EJB的离散的业务逻辑, 在本书最后一章中将会采用您在前面章节实现的每个EJB, 并且使用EJB设计模式和最好的经验将它们装配成一个完整的EJB应用程序. 作者希望自己的这种方法将会是成功的.
高级 EJB概念…您准备好了吗
作者有意将一些高级和复杂的内容, 例如事务. 安全性和设计模式, 放到了本书的第3部分讨论, 这样就可以集中讨论EJB的基础内容. 一旦您掌握了EJB 2. 0的基础内容, 您就可以进入第3部分的高级概念. 在这一部分, 我们将通过完整的代码集中讨论如何实现EJB事务. EJB安全性. EJB设计模式和由 EJB1.1迁移到 EJB 2. 0的策略.
重复是学习的关键
本书所采取的组织方式是先在简要介绍的章节中讨论概念. 特征. API和编写特定EJB的规则, 然后介绍实现的细节, 在逐步地实现一个示例代码程序的过程中将会重复主要的概念和规则. 作者坚信先讨论EJB的基础内容, 然后再通过示例代码重复主要的概念来加深印象, 这种方式将会让您在学习过程中少走弯路.
本书不包括的内容
作者已经告诉您为什么要买这本书的全部主要原因, 所以为了公平起见, 作者将要预先告诉您, 在某些情况下, 您可能不需要买这本书. 下面就是不买的理由:
本书内容与供应商无关
本书并不讨论使用BEA公司的Weblogic. IBM公司的Websphere. Sun公司的iPlanet, 或者任何其他带有商标的应用服务器来进行打包. 装配和部署等过程. EJB的实现细节是标准化的, 所以它们可以被应用到所有的应用服务器上. 本书集中讨论如何使用Sun公司的J2EERI(Reference Implementation)或 J2SDKEE RI的部署工具(deploytool)打包. 装配和部署 EJB应用程序, 书中的指导是针对这个工具而言的. 作者选择JZSDKEE RI主要是考虑到资源要求上的原因——J2SDKEE RI只需要少于 15MB的硬盘空间, 容易安装, 运行只需 128MB的内存, 而且它也是免费使用的. 大部分的带有商标的应用服务器需要100MB的硬盘空间和至少256MB的内存(或者更多), 并且它们的安装过程也是具有挑战性的.
本书不是一本关于Java编程的书籍
本书不是关于Java编程的书籍——本书只是讲解如何使用EJB编写商业应用程序. 本书未介绍 Servlet. JSP. SQL. JDBC. UML和 CORBA的基础知识. 本书假定您已经具有实际的 Java编程经验, 并且熟悉 HTML. servlet. JSP. SQL. JDBC和CORBA等内容. 作者在书中使用了UML图表, 并且假定您已经基本熟悉这些图表.
本书读者对象
本书的首要目的是帮助编写EJB程序的新手, 以及现有EJB1. 1的程序员学习如何在EJB 2. 0中编写业务逻辑. 理想的读者至少要有一年的Java编程经验, 并且要熟悉HTML. servlet. JSP. SQL. rmi和JDBC.
本书组织结构
本书包含18章, 分成3个部分.
第1部分:概述
本书的第1部分由第1章和第2章两章介绍性内容组成, 这两章对 Java 2 Enterprise Edition和Enterprise JavaBean 2. 0作了介绍性的. 非技术性的概述. 能够从这部分获益的读者将会是Java程序员中的新手, 以及非Java程序员(例如技术经理. 项目经理等等), 他们可以通过阅读这两章获得对J2EE(1. 3)和 EJB(2. 0)基础的较好理解. 这两章所包含的信息将会帮助他们与 EJB程序员有效地进行交流.
. 第1章, “Java 2 Enterprise Edition1. 3简介”——这一章是对Java 2 Enterprise Edition的基本的和非技术性的介绍. 这一章讨论了 J2EE1. 3规范所需的各种Java技术, 以及它们是如何组合到一起的.
. 第2章, “ Enterprise JavaBean 2. 0简介”——这一章是对 Enterprise JavaBean 2. 0的介绍, 并且在不让读者接触太多技术细节的条件下, 讨论了 Enterprise JavaBean的基本内容.
第2部分:开发 EJB
本书的第2部分是针对Java程序员和 EJB程序员的, 而这些程序员对学习如何实现EJB 2. 0感兴趣. 这一部分各个章节的内容涵盖了理论知识, 以及逐步地指导如何实现. 打包和部署会话beau. 实体beau以及消息驱动beau的知识.
. 第3章, “示例应用程序概述”——这一章概述了无状态和有状态会话beau. 托管beau式和托管容器式持久性实体beau, 以及消息驱动beau的示例应用程序的高级实现.
. 第4章, “ EJB客户视图”——这一章讨论了EJB的本地和远程视图, 实现远程和本地接日的规则, 以及它们各自的优点和缺点.
. 第5章, “会话beau简介”——这一章介绍了会话beau的特征. API和细节.
. 第6章, “开发无状态会话 beau”——这一章涉及无状态会话 beau的生命周期, 并且循序渐进地指导如何实现. 打包. 装配和部署无状态会话beau示例应用程序.
. 第7章, “开发有状态会话 beau”——这一章描述了有状态会话 beau的生命周期, 并且循序渐进地指导如何实现. 打包. 装配和部署有状态会话beau示例应用程序.
. 第8章, “实体beau简介”——这一章讨论了实体beau的特征. 它们的生命周期. API和编写实体beau的规则.
. 第9章, “开发托管 beau式实体 beau”——这一章将循序渐进地指导如何实现. 打包. 装配和部署一个BMP实体beau示例应用程序.
. 第10章, “ CMP2. 0:抽象持久性模式和EJB QL”——这一章将会帮助您理解抽象持久性模式幕后的概念, 以及EJB查询语言.
. 第11章, “开发CMP 2. 0实体beau”——这一章将循序渐进地指导如何实现. 打包. 装配和部署一个CMP实体beau示例应用程序.
. 第12章, “Java消息服务”——这一章将要讨论 JMS API. 消息模型以及如何使用 JMS API.
. 第13章, “开发消息驱动beau”——这一章将循序渐进地指导如何实现. 打包. 装配和部署一个消息驱动beau示例应用程序.
第3部分:高级主题
本书的最后一部分将要讨论一些EJB高级概念, 这些概念包括事务. 安全. EJB设计模式和迁移问题.
. 第14章, “事务”——这一章讨论如何实现不同类型 EJB的程序性的和声明性的事务.
. 第15章, “Enterprise JavaBean安全”. 这一章讨论安全的概念, 以及如何实现 EJB的程序性的和声明性的安全.
. 第16章, “EJB设计模式. 互操作性和性能”——这一章讨论通用的 EJB设计模式, 以及 EJB 2. 0中的性能和互操作性问题.
. 第17章, “将EJB1. 1应用程序迁移到EJB 2. 0容器中”——这一章讨论将 EJB1. 1的应用程序迁移到 EJB 2. 0容器中相关的问题. 本章包含了一个迁移示例应用程序的细节和步骤.
. 第18章, “装配J2EE在线注册应用程序”——最后一章使用了本书第2部分中所开发的离散的EJB组件, 并且在需要的时候重新定制它们, 然后使用适当的设计模式, 最终完成了一个完整的应用程序. 本章还讨论了一些实现问题.
第4部分:附录
在本书的末尾, 将会看到关于如何下载. 安装和设置Sun公司的 J2SDKEE1. 3 RI的指导, 您可以浏览与本书对应的Web站点http://WWW. J2EEBootCamp. com获取最近的更新, 并下载相应的Appendix. pdf文件.
与本书对应的Web站点
为了让本书保持在一个合理的页数之内, 本书没有完整列出示例的代码. 事实上, 本书只是列举了示例程序的代码片断, 用于在讨论中阐明主要的概念. 您可以到与本书对应的站点http://www. J2EEBootCamp. com下载完整的源代码, 以及编译过的类文件和可部署的ear文件. 作者鼓励您去访问这个网站来获取最新的bug修正. 新的文章. 新的示例程序, 以及作者公开的担保.
您可以随意将自己的评论和建议发到电子邮箱pvt@j2eebootcamp.com中, 作者将会尽最大的努力在几天内给您回复.
本书封面上的长颈鹿在做什么呢
作者本人是一个热心的探险旅游家, 并且作为一名在硅谷工作的服务器端的Java顾问, 作者在过去的几年里每年都可以旅行两个月, 这要归功于Internet的繁荣(噢!很怀念那些过去的好时光). 作者曾经总有一个模糊的想法, 打算某一天写一本关于Java的书. 这个想法一直到作者横跨东非的旅行期间——更为精确地说, 是在乞力马扎罗山上2000年1月1日千禧年的第一次日出的时候才变为了现实生活中的目标. 所以作者谨以本书封面上的图片献给神圣的乞力马扎罗山(非洲最高的山脉), 它的令人惊奇的野生动物, 以及非洲的各种不同的文化和人.