资源名称:OSGi与Equinox 创建高度模块化的Java系统
内容简介:
阅读本书,首先你很快就会使用Eclipse bundle工具创建第一个基于OSGi的系统,进而转向复杂的产品开发。接下来,你将掌握一些用于创建具有特殊模块化、高效性和可维护性系统的最佳实践和技巧。你将了解所有的OSGi声明式服务,以及如何通过这些服务来解决各种现实问题。最后,你会发现所有这些都在本书所提供的完整案例(从早期的原型构建到最终的应用交付)中得以实现。
资源目录:
第一部分 简介
第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示例
第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 Airbag和IAirbagListener 40
4.1.4 EmergencyMonitor 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
第三部分 进阶篇
第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 参数说明 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
第四部分 参考篇
第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 扩展者模式和BundleTracker 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.forName() 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 元素 345
24.1.3 元素 347
24.1.4 元素 347
24.1.5 元素 348
24.1.6 元素 349
24.1.7 元素 349
24.1.8 元素 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
资源截图: