第一部分 简介 2
第1章 OSGi、 Equinox和Eclipse 2
1.1简史 2
1.2合作 3
1.3实战的模块性和自由性 4
1.4平台 4
1.5生态系统 5
1.6 OSGi的来龙去脉 5
1.6.1 Java的谎言 5
1.6.2现状核实 6
1.6.3 OSGi的寿命 6
1.7实践中的OSGi和Equinox 7
1.8总结 8
第2章 OSGi基本概念 9
2.1 bundle环境 9
2.2为何选择OSGi 10
2.3 bundle剖析 13
2.4模块化 14
2.4.1导出包 14
2.4.2导入包 14
2.4.3需要的bundle 15
2.4.4强化模块化特性 16
2.5模块化设计概念 16
2.6生命周期 17
2.7协作 18
2.7.1服务 18
2.7.2扩展和扩展点 19
2.8 OSGi框架 20
2.9安全性 20
2.10 OSGi框架实现 21
2.11总结 21
第二部分 OSGi示例 24
第3章 教程介绍 24
3.1何为Toast 24
3.2 Toast的演变 26
3.3开发环境安装 27
3.4示例代码 28
3.4.1在章与章之间切换 28
3.4.2比较 29
3.5目标平台设置 30
3.5.1预定义的目标 31
3.5.2定义目标平台 32
3.6通过示例进行学习 35
3.7总结 36
第4章 你好,Toast 37
4.1简单的场景 37
4.1.1创建工程 37
4.1.2 Gps 38
4.1.3 Ai rbag和IAi rbagLi stener 40
4.1.4 EmergencyMoni tor 41
4.1.5 Main 43
4.1.6运行 43
4.1.7检查点 43
4.2将Toast划分为Bundle 43
4.2.1 GPS bundle 45
4.2.2安全气囊bundle 47
4.2.3紧急情况监视器bundle 47
4.2.4启动 49
4.3总结 50
第5章 服务 52
5.1转移到服务 52
5.2注册GPS服务 54
5.3注册安全气囊服务 58
5.4获取服务示例代码 61
5.5启动 64
5.6故障排解 64
5.7总结 65
第6章 动态服务 66
6.1动态服务简介 66
6.2使用服务追踪器 67
6.2.1修改bundle激活器 67
6.2.2启动 70
6.2.3服务追踪器小结 72
6.3使用服务激活器工具包 73
6.3.1在目标平台上安装SAT 73
6.3.2修改GPS bundle激活器 73
6.3.3修改安全气囊bundle激活器 74
6.3.4修改紧急情况监视器bundle激活器 74
6.3.5启动 75
6.3.6 SAT小结 76
6.4使用声明式服务 76
6.4.1修改GPS bundle 77
6.4.2修改安全气囊bundle 79
6.4.3修改紧急情况监视器bundle 80
6.4.4运行 82
6.4.5声明式服务总结 83
6.5总结 83
第7章 客户端/服务器端交互 84
7.1后台 84
7.1.1核心bundle 84
7.1.2后台应急bundle 85
7.2客户端 88
7.2.1信道bundle 88
7.2.2紧急情况监视器bundle 92
7.3工具类 94
7.3.1常量 94
7.3.2属性 94
7.3.3日志 95
7.4运行Toast 95
7.4.1运行后台 96
7.4.2运行客户端 97
7.5总结 97
第8章 测试 99
8.1使Toast具备可测试性 99
8.2对Toast进行单元测试 100
8.2.1测试方案 100
8.2.2编写测试用例 101
8.2.3运行单元测试 103
8.3系统测试Toast 104
8.3.1测试规划 104
8.3.2创建测试工具 105
8.3.3编写测试用例 107
8.3.4运行系统测试 110
8.4总结 111
第9章 打包 112
9.1定义Toast产品 112
9.1.1创建产品配置 112
9.1.2概述页 114
9.1.3依赖页 115
9.1.4配置页 116
9.1.5启动页 116
9.1.6运行产品 118
9.1.7产品化客户端 118
9.2导出Toast 118
9.3为其他平台打包 121
9.4认真考虑组件定义 123
9.4.1版本和版本范围 123
9.4.2导出包和友元 124
9.5总结 126
第10章 插件化服务 127
10.1分离接口与接口的实现 127
10.1.1将Fake Airbag与其接口相互分离 128
10.1.2将模拟GPS与其接口相分离 129
10.1.3回归测试 129
10.2设备模拟 130
10.2.1概念 130
10.2.2设备模拟器框架 131
10.3作为插件式服务的模拟设备 131
10.3.1模拟安全气囊 131
10.3.2模拟GPS 133
10.4运行模拟设备 134
10.5总结 135
第11章 可扩展的用户界面 136
11.1 Crust 136
11.1.1 Crust shell 136
11.1.2 Crust工具 137
11.2紧急情况处理 138
11.2.1创建可插拔的用户界面 138
11.2.2重构紧急情况处理业务逻辑 139
11.2.3紧急情况处理用户界面 140
11.2.4运行用户界面 141
11.3车载气候系统和音响系统 142
11.3.1车载气候系统与音响设备 142
11.3.2空调和音响屏幕 144
11.3.3运行用户界面 144
11.4 OSGi应用模型 145
11.5导航和地图 148
11.5.1谷歌地球集成 148
11.5.2地图支持 151
11.5.3应用可扩展性和导航支持 152
11.5.4运行用户界面 152
11.6总结 154
第12章 动态配置 155
12.1跟踪场景 155
12.2安装跟踪代码 156
12.2.1 Core Tracking Bundle 156
12.2.2后台跟踪bundle 157
12.2.3客户端跟踪bundle 157
12.3运行基本的跟踪场景 158
12.4配置 159
12.4.1 OSGi的管理控制 159
12.4.2客户端跟踪bundle 159
12.4.3运行可配置的Toast 161
12.4.4具备持久化配置的运行 162
12.5总结 162
第13章 Web门户 163
13.1门户 163
13.2 Portalservlet 164
13.3使用服务进行操作查询 165
13.4声明门户操作 168
13.5白板模式的利与弊 170
13.6总结 170
第14章 使用P2进行系统开发 171
14.1 Equinox p2简介 171
14.1.1架构 172
14.1.2 p2元数据——可安装的单元 172
14.1.3组件 173
14.1.4仓库 173
14.1.5模式 174
14.1.6指挥者 174
14.1.7引擎 174
14.2细化Toast结构 174
14.2.1使用特性定义产品 175
14.2.2后台特性 175
14.2.3客户端特性 177
14.2.4重构小结 180
14.3编写一个配置器 180
14.3.1配置器 181
14.3.2配置后台 184
14.3.3后台小结 184
14.4增加一个Web部署页面 184
14.4.1创建动作 185
14.4.2管理动作 185
14.4.3安装卸载动作 186
14.4.4安装配置UI 186
14.5导出、运行以及配置 186
14.5.1引入一个P2仓库 186
14.5.2运行Toast后台 189
14.5.3创建并配置汽车 190
14.6客户端动态部署 191
14.7总结 192
第三部分 进阶篇 194
第15章 声明式服务 194
15.1声明式服务模型 194
15.2常见场景 195
15.2.1最简单的组件 195
15.2.2引用服务 197
15.2.3提供服务 198
15.2.4引用和提供服务 199
15.2.5立刻激活组件 201
15.2.6白板模式 202
15.2.7工厂组件 207
15.3启动和调试DS应用 213
15.4 PDE工具 214
15.5总结 216
第16章 扩展 217
16.1扩展注册 217
16.2扩展点 219
16.3扩展 221
16.4高级扩展主题 222
16.4.1扩展ID 222
16.4.2命名扩展和匿名扩展 222
16.4.3扩展工厂 223
16.5扩展注册机制的生命周期 223
16.6动态扩展的应用场景 224
16.6.1场景一:没有缓存 225
16.6.2场景二:缓存扩展 225
16.6.3场景三:缓存对象 227
16.7服务与扩展 229
16.8扩展注册的神话 231
16.9总结 231
第17章 日志 232
17.1日志服务规范 232
17.1.1日志级别 232
17.1.2记录日志 233
17.1.3读取日志 233
17.1.4监听日志 234
17.2在Toast中使用LogService 234
17.3使用LogReaderservice 237
17.4 Toast的LogUtility类 239
17.5 Equinox的Logservice实现 240
17.6总结 242
第18章 HTTP支持 243
18.1 HttpService 243
18.2注册和注销Servlet 245
18.3声明式HTTP内容注册 248
18.4使用Jetty 248
18.5 HTTP上下文和JAAS集成 249
18.5.1基于HTTP的认证和登录 249
18.5.2运行具备安全机制的客户端 252
18.6疑难解答 253
18.6.1 BindException 253
18.6.2 HttpService在监听哪个端口 253
18.7总结 254
第19章 服务器端 255
19.1服务器端和OSGi 255
19.2在Web应用中嵌入Toast后台系统 257
19.2.1更新产品 257
19.2.2 Web应用的Root文件 259
19.2.3构建Web应用 261
19.2.4运行Web应用 262
19.2.5疑难解答 264
19.2.6 <init-param>参数说明 265
19.3 OSGi中的远程服务 265
19.3.1 Eclipse通信框架 266
19.3.2远程服务 266
19.3.3分布式Toast 266
19.3.4远程服务主机 267
19.3.5远程服务客户端 268
19.3.6服务发现 269
19.3.7运行分布式系统 270
19.4总结 271
第20章 发布工程 272
20.1什么是PDE构建 272
20.2 build.properties bundle 273
20.2.1控制属性 274
20.2.2使用自定义构建脚本 275
20.3创建构建器 275
20.3.1调整PDE构建的目标 276
20.3.2 build.properties 276
20.4运行构建器 279
20.5调整构建 282
20.5.1自定义构建脚本 282
20.5.2仓库和附加依赖项 283
20.5.3从SCM(软件配置管理)系统中提取内容 283
20.5.4获取map文件 285
20.5.5自动替换版本号 286
20.5.6设定版本号 286
20.5.7定位和放置根目录文件 287
20.6构建附加特征 288
20.6.1创建特征构建器 288
20.6.2 build.properties 288
20.6.3运行特征构建 290
20.7构建WAR包 291
20.8总结 291
第四部分 参考篇 294
第21章 动态性的最佳实践 294
21.1动态性与你 294
21.2 Toast的动态性 295
21.3动态性的挑战 296
21.4动态性意识 297
21.4.1对象处理 298
21.4.2 bundle监听器 299
21.5扩展者模式和Bundl eTracker 300
21.6动态性启用 300
21.7启动和停止的动态性 302
21.7.1启动级别 303
21.7.2正确使用服务 304
21.7.3关闭也不总是易事 304
21.8总结 305
第22章 整合代码库 306
22.1 bundle形式的JAR 306
22.2采用注入的方式进行bundle化 307
22.3通过包装的方式进行bundle化 309
22.4通过引用的方式进行bundle化 310
22.5使用bnd进行bundle化 312
22.6解决类加载问题 312
22.6.1 Class.orName() 312
22.6.2与上下文类加载器有关的问题 316
22.6.3管理JRE类 317
22.6.4序列化 318
22.7总结 318
第23章 高级主题 319
23.1 Equinox控制台 319
23.2 OSGi中的角色 322
23.3 bundle的形态 323
23.4片段 325
23.5单例 327
23.6 bundle生命周期 328
23.6.1生命周期状态 328
23.6.2 BundleActivator 329
23.6.3激活器的弊端 330
23.6.4激活器的使用 330
23.7 bundle激活策略 331
23.8控制bundle启动 332
23.8.1持久化启动 332
23.8.2启用激活策略 333
23.8.3 osgi.bundles 333
23.9类加载 334
23.9.1类查找算法 334
23.9.2声明导入和导出 335
23.9.3导入包与需要的bundle 335
23.9.4可选性 336
23.9.5 use指令 336
23.9.6再导出 337
23.9.7 x-internal和x-friends 337
23.9.8引导代理 337
23.10配置和运行Equinox 338
23.10.1 config.ini 338
23.10.2可执行程序 339
23.11数据区 341
23.12总结 343
第24章 声明式服务引用 344
24.1组件XML模式v1.0.0 344
24.1.1声明XML的命名空间和模式 344
24.1.2 <component>元素 345
24.1.3 <implementation>元素 347
24.1.4 <property>元素 347
24.1.5 <properties>元素 348
24.1.6 <service>元素 349
24.1.7 <provice>元素 349
24.1.8 <reference>元素 349
24.2组件的生命周期 351
24.2.1满足组件的配置 351
24.2.2组件的激活、注销与修改 353
24.2.3访问引用服务 355
24.2.4组件的即时性 357
24.2.5组件属性 357
24.3总结 359