第1章 理解对象永久性 1
1.1 什么是对象的永久性 2
1.2 目前所采用的对象永久性技术 2
1.2.1 关系数据库 3
1.2.2 文件系统 4
1.2.3 对象数据库 4
1.2.4 实体对象bean(Entity Bean) 5
1.3 使用JDO实现对象的永久性 5
1.4 JDO在各种不同的永久性技术中的地位 8
1.5 下一章内容 9
第2章 一个基于JDO的简单应用程序 10
2.1 定单处理应用程序的域对象模型 10
2.2 讨论 15
2.2.1 改进过程和对象的永久性特性 16
2.2.2 JDOBootstrap和PersistenceManagerFactory类 17
2.2.3 事务(Transactions) 17
2.2.4 临时性和永久性的比较 17
2.2.5 以循环方式处理位于Extent空间中的所有永久性对象 18
2.3 应用程序源代码 18
2.4 下一章内容 20
第3章 JDO的体系结构 21
3.1 JDO的实现和JDO的软件提供商 21
3.2 JDO实例 22
3.3 JDO环境 22
3.3.1 非管理性环境 22
3.3.2 管理性环境 23
3.3.3 JDO两种使用环境之间的比较 24
3.4 对象永久性和临时性之间的比较 24
3.5 事务性操作和非事务性操作的比较 25
3.6 JDO对事务性/永久性实例的支持 26
3.6.1 具有临时性和事务性特性的实例 26
3.6.2 具有永久性和非事务性特性的实例 27
3.7 JDO身份标志 27
3.7.1 数据存储身份标志 28
3.7.2 应用程序身份标志 29
3.7.3 非永久性JDO身份标志 31
3.7.4 几种不同类型的JDO身份标志的比较 32
3.8 下一章内容 32
第4章 JDO实例的生命周期状态 33
4.1 判断一个实例的状态 33
4.2 必须的生命周期状态 34
4.2.1 临时性生命周期状态(Transient) 34
4.2.2 实例初次实现永久化的状态(Persistent-New) 35
4.2.3 新创建的实例在同一事务中被删除时的状态(Persistent-New-Deleted) 35
4.2.4 空状态(Hollow) 35
4.2.5 永久性干净状态(Persistent-Clean) 36
4.2.6 永久性脏状态(Persistent-Dirty) 36
4.2.7 永久性删除状态(Persistent-Deleted) 36
4.3 JDO实现必须提供的生命周期状态转变特性 37
4.3.1 永久化一个处于临时性状态的实例 37
4.3.2 在一个事务中创建/删除永久性实体对象 38
4.3.3 读取实例的数据成员的值 38
4.3.4 将实例清除出内存(Eviction) 39
4.3.5 更新永久性实例数据成员的值 39
4.3.6 刷新永久性实例数据成员的值 40
4.3.7 删除一个永久性实例 41
4.3.8 删除一个永久性脏实例 42
4.3.9 将一个实例的状态设置为临时性状态 43
4.3.10 所有必须的状态转化 44
4.4 可选生命周期状态 45
4.4.1 永久性非事务状态(Persistent-Nontransactional) 45
4.4.2 临时性干净状态(Transient-Clean) 45
4.4.3 临时性脏状态(Transient-Dirty) 45
4.5 可选生命周期状态之间的转换 45
4.5.1 乐观事务 45
4.5.2 在事务之外对永久性数据成员的访问 46
4.5.3 对临时性实例的事务性访问 47
4.6 InstanceCallbacks接口 49
4.6.1 数据成员加载后(Post Load) 49
4.6.2 数据存储之前(Pre Store) 50
4.6.3 数据清除之前(Pre Clear) 50
4.6.4 实例删除之前(Pre Delete) 50
4.7 下一章内容 51
第5章 永久性对象模型 52
5.1 永久性的透明性 52
5.2 JDO实例 54
5.3 第一类对象和第二类对象 55
5.3.1 对象变化的可见性 57
5.3.2 具有永久性属性的类作为第二类对象 58
5.4 “第三类对象”——数组 59
5.5 JDO对永久性数据成员所能使用的数据类型的限制 60
5.5.1 具有非永久性和非事务性属性的数据成员 60
5.5.2 具有事务性属性和非永久性属性的数据成员 60
5.5.3 具有永久性属性的数据成员 60
5.6 继承 78
5.7 附加部分:定单处理系统的GUI 84
5.8 下一章内容 85
第6章 JDO的基本接口和类 86
6.1 JDOHelper类 86
6.1.1 JDOHelper类中与判断永久性实例状态有关的方法 86
6.1.2 JDOHelper类中与管理功能有关的方法 87
6.1.3 JDOHelper类中与JDO实现的引导功能相关的方法 90
6.2 关于JDO的属性说明 92
6.2.1 ConnectionFactory属性 94
6.2.2 启动JDO实现 94
6.3 PersistenceManagerFactory接口 98
6.4 PersistenceManager接口 100
6.4.1 缓冲区管理 100
6.4.2 实例的生命周期 101
6.4.3 使用JDO身份标志 104
6.4.4 管理功能 105
6.4.5 获得实例 106
6.4.6 查询工厂类方法 107
6.5 Extent(类的范围)接口 107
6.6 PersistenceCapable接口 110
6.7 下一章内容 110
第7章 事务管理 111
7.1 事务 111
7.2 Transaction接口 111
7.3 事务策略 112
7.3.1 “悲观”(数据存储空间)事务策略 113
7.3.2 “乐观”事务策略 114
7.3.3 乐观事务和刷新 116
7.3.4 使用明确的刷新操作的解决方案 119
7.4 高级事务选项 119
7.5 为提高应用程序效率的事务模式 119
7.5.1 Restore Values模式 119
7.5.2 Retain Values模式 120
7.6 与JDO实例的同步化 120
7.7 下一章内容 122
第8章 使用JDOQL语言查询数据 123
8.1 Query接口的体系结构 123
8.2 构造Query对象(实现了Query接口的类的对象) 125
8.3 Query接口 126
8.3.1 Query对象的执行 128
8.3.2 关闭Query对象的返回结果 128
8.4 关于Query对象的应用程序实例 128
8.4.1 不使用过滤器的Query对象 128
8.4.2 使用实例排序规则的Query对象 130
8.4.3 使用过滤器的Query对象 130
8.5 查询对象的过滤器表达式 130
8.5.1 JDO支持的逻辑操作符 131
8.5.2 JDOQL支持的关键字 132
8.5.3 JDOQL和Java操作符之间的区别 132
8.6 更加复杂的例子 134
8.6.1 参数化 134
8.6.2 在单个数据成员之间的导航 136
8.6.3 集合数据成员之间的导航 136
8.7 非约束性查询变量 137
8.8 动态查询窗口(Dynamic Query Window) 137
8.9 下一章内容 139
第9章 JDO异常 140
9.1 JDO异常类层次结构 140
9.2 基本异常类 141
9.2.1 JDOException异常类 141
9.2.2 JDOFatalException异常类 142
9.2.3 JDOCanRetryException异常类 142
9.2.4 JDOUserOptionException异常类 142
9.2.5 JDOUnsupportedOptionException异常类 143
9.2.6 JDOFatalUserException异常类 143
9.2.7 JDOFatalInternalException异常类 143
9.2.8 JDODataStoreException异常类 143
9.2.9 JDOFatalDataStoreException异常类 143
9.3 应用程序异常 143
9.4 下一章内容 144
第10章 永久性描述符 145
10.1 XML文档概述 145
10.2 永久性描述符的命名规范 146
10.3 永久性描述符的元素 146
10.3.1 〈extension〉标记 147
10.3.2 〈ido〉标记 147
10.3.3 〈package〉标记 147
10.3.4 〈class〉标记 147
10.3.5 〈field〉标记 148
10.3.6 〈collection〉标记 150
10.3.7 〈map〉标记 151
10.3.8 〈array〉标记 152
10.4 实例——永久性描述符文件“op.jdo” 152
10.5 JDO的软件提供商对永久性描述符所作的特定扩展 154
10.6 实例——永久性描述符中的删除语法 155
10.7 下一章内容 156
第11章 JDO与J2EE的集成 157
11.1 管理性环境 157
11.2 J2EE简介 157
11.2.1 EJB层 157
11.2.2 Web层 160
11.3 JDO实例的序列化 161
11.4 JDO中的事务和J2EE中的事务的比较 162
11.5 JDO与EJB的集成 163
11.6 JDO与无状态会话Bean的集成 164
11.7 JDO与有状态会话Bean的集成 167
11.8 JDO和实体Bean之间的集成 171
11.9 JDO和消息驱动Bean的集成 179
11.10 JDO与Web层的集成 181
11.10.1 服务器端小程序 182
11.10.2 JSP 184
11.11 在管理性环境中启动JDO 186
11.12 下一章内容 186
第12章 JDO的实现 187
12.1 Versant公司的enJin产品 189
12.1.1 关于Versant公司 189
12.1.2 关于enJin 189
12.1.3 enJin支持的数据存储方式 189
12.1.4 enJin支持的应用程序服务器 189
12.2 Poet Software公司的FastObjects产品 189
12.2.1 关于FastObjects公司 190
12.2.2 关于FastObjects公司的产品 190
12.2.3 FastObjects公司的产品家族 190
12.2.4 FastObjects支持的数据存储方式 191
12.2.5 FastObjects支持的应用程序服务器 191
12.3 ObjectFrontier公司的FrontierSuite for JDO产品 191
12.3.1 关于ObjectFrontier公司 191
12.3.2 关于FrontierSuite for JDO产品 191
12.3.3 ObjectFrontier公司的产品家族 191
12.3.4 FrontierSuite forJDO支持的数据存储方式 192
12.3.5 FrontierSuite for JDO支持的应用程序服务器 193
12.4 Signsoft公司的IntelliBO产品 193
12.4.1 关于Signsoft公司 193
12.4.2 关于IntelliBO产品 193
12.4.3 IntelliBO支持的数据存储方式 194
12.4.4 IntelliBO支持的应用程序服务器 194
12.5 Hemisphere Technologies公司的JDO Genie产品 194
12.5.1 关于Hemisphere Technologies公司 194
12.5.2 关于JDO Genie产品 195
12.5.3 JDO Genie支持的数据存储方式 195
12.5.4 JDO Genie支持的应用程序服务器 195
12.6 Object Industries公司的JRelay产品 195
12.6.1 关于Object Industries公司 195
12.6.2 关于JRelay产品 196
12.6.3 JRelay支持的数据存储方式 196
12.6.4 JRelay支持的应用程序服务器 196
12.7 SolarMetric公司的Kodo JDO产品 196
12.7.1 关于SolarMetric公司 196
12.7.2 关于Kodo JDO产品 196
12.7.3 产品家族 197
12.7.4 Kodo JDO支持的数据存储方式 197
12.7.5 Kodo JDO支持的应用程序服务器 197
12.8 LIBeLIS公司的LiDO产品 197
12.8.1 关于LIBeLIS公司 198
12.8.2 关于LiDO产品 198
12.8.3 与LIBeLIS相关的永久性描述符的扩展 198
12.8.4 LIBeLIS公司的产品家族 198
12.8.5 LiDO支持的数据存储方式 199
12.8.6 LiDO支持的应用程序服务器 199
12.9 Prism Technologie公司的OpenFusion JDO产品 200
12.9.1 关于PrismTechnologie公司 200
12.9.2 关于OpenFusion产品 200
12.9.3 OpenFusion支持的数据存储方式 201
12.9.4 OpenFusion支持的应用程序服务器 201
12.10 Orient Technologie公司的Orient产品 201
12.10.1 关于Orient Technologie公司 201
12.10.2 关于Orient产品 202
12.10.3 Orient的产品家族 202
12.10.4 Orient支持的数据存储方式 202
12.10.5 Orient支持的应用程序服务器 202
12.11 HYWY Software公司的生产环境系统PE:J 202
12.11.1 关于HYWY Software 202
12.11.2 关于PE:J产品 203
12.11.3 PE:J的产品家族 203
12.11.4 PE:J产品支持的数据存储方式 203
12.11.5 PE:J支持的应用程序服务器 204
第13章 结语 205
13.1 对JDO 1.0版技术规范的改进 205
13.1.1 序列(Sequence) 205
13.1.2 范围(Extent)对象的分类 206
13.1.3 JDOQL 206
13.1.4 预先检索模式(Pre-fetch Pattern) 208
13.1.5 乐观事务 209
13.1.6 标准化的O—R(对象-关系)映射 209
13.1.7 事件驱动的“反作用”实例 209
13.2 进一步的信息源 209
13.2.1 Oglvie Partner有限公司 209
13.2.2 Yahoo!Groups上的JavaDataObjects 210
13.2.3 JDOcentral.com 210
附录A JDOHelper启动属性 211
附录B JDO实现所支持选项的字符串 212
附录C JDO永久性描述符的DTD文件 213
附录D PersistenceManagerFactory接口 214
附录E JDOQL语法 215