《深入理解OSGi:Equinox原理、应用与最佳实践》是原創Java技术性书籍行业继《深入理解Java虚拟机》后的又一整体实力之作,也是全世界首本根据全新OSGiR5.0规范的经典著作。基础理论层面,既全方位讲解了OSGi规范,刻骨铭心表明了OSGi原理,详尽讲解了OSGi服务,又系统化详细介绍了Equinox架构的操作方法,并根据源代码剖析了该架构的工作方案;实践层面,不但包括一些典型性的实例,还小结了很多的最佳实践,具有实践指导作用。
本书共14章,分4个一部分。第一部分(第1章):走进OSGi,关键详细介绍了什么叫OSGi及其为何应用OSGi。第二一部分(第二~4章):OSGi规范与原理,对全新的OSGiR5.0中的关键规范开展了全方位的讲解,最先讲解了OSGi控制模块的创建、叙述、相互依赖的解决,随后讲解了Bundle的起动原理和生产调度管理方法,最终讲解了与当地及远程控制服务有关的內容。第三一部分:OSGi服务与Equinox运用实践(第五~11章),不但详尽讲解了OSGi服务规划纲要规范和公司级规范中最常见的好多个子规范和服务的关键技术,还根据一个根据Equinox的BBS实例演试了Equinox的操作方法,最重要的是还根据源代码剖析了Equinox重要作用的完成体制和原理。第四一部分:最佳实践(第12~14章),小结了很多有关OSGi的最佳实践,包含从Bundle怎样取名、控制模块区划、相互依赖解决到维持OSGi交叉性、管理流程起动次序、应用API基准线管理方法控制模块版本号等各层面的实践方法,除此之外还详细介绍了SpringDM的原理及其怎样在OSGi阶段中开展程序流程检测。
目录
- 前言
- 第一部分 走近OSGi
- 第1章 Java模块化之路 / 2
- 1.1 什么是OSGi / 2
- 1.1.1 OSGi规范的演进 / 4
- 1.1.2 Java模块化规范之争 / 7
- 1.2 为什么使用OSGi / 11
- 1.2.1 OSGi能让软件开发变得更容易吗 / 12
- 1.2.2 OSGi能让系统变得更稳定吗 / 13
- 1.2.3 OSGi能让系统运行得更快吗 / 14
- 1.2.4 OSGi能支撑企业级开发吗 / 15
- 1.3 本章小结 / 16
- 第二部分 OSGi规范与原理
- 第2章 模块层规范与原理 / 18
- 2.1 OSGi规范概要 / 18
- 2.2 Bundle / 20
- 2.3 描述元数据 / 21
- 2.3.1 预定义标记 / 21
- 2.3.2 使用可视化工具 / 27
- 2.4 Bundle的组织与依赖 / 31
- 2.4.1 导出和导入Package / 31
- 2.4.2 约束规则与示例 / 38
- 2.4.3 校验Bundle有效性 / 44
- 2.5 OSGi的类加载架构 / 45
- 2.5.1 父类加载器 / 46
- 2.5.2 Bundle类加载器 / 47
- 2.5.3 其他类加载器 / 49
- 2.5.4 类加载顺序 / 50
- 2.6 定义执行环境 / 51
- 2.7 本地化 / 54
- 2.8 本章小结 / 55
- 第3章 生命周期层规范与原理 / 56
- 3.1 Bundle标识 / 56
- 3.2 Bundle状态及转换 / 57
- 3.2.1 安装过程 / 59
- 3.2.2 解析过程 / 61
- 3.2.3 启动过程 / 62
- 3.2.4 更新过程 / 63
- 3.2.5 停止过程 / 64
- 3.2.6 卸载过程 / 65
- 3.3 启动级别 / 65
- 3.3.1 设置启动级别 / 66
- 3.3.2 调整活动启动级别 / 67
- 3.4 事件监听 / 68
- 3.4.1 事件类型 / 69
- 3.4.2 事件分派 / 70
- 3.5 系统Bundle / 71
- 3.6 Bundle上下文 / 72
- 3.7 本章小结 / 73
- 第4章 服务层规范与原理 / 74
- 4.1 服务 / 74
- 4.2 OSGi服务示例 / 75
- 4.3 服务属性 / 80
- 4.3.1 属性过滤器 / 82
- 4.3.2 预定义属性 / 83
- 4.3.3 修改属性 / 84
- 4.4 服务工厂 / 85
- 4.5 服务跟踪器 / 86
- 4.6 引用服务 / 89
- 4.7 释放和注销服务 / 91
- 4.8 服务层事件 / 91
- 4.8.1 事件类型 / 92
- 4.8.2 事件分派 / 92
- 4.8.3 ServiceRegistration对象的提前请求 / 93
- 4.9 远程服务 / 94
- 4.9.1 准备远程服务环境 / 94
- 4.9.2 远程服务示例 / 96
- 4.9.3 远程服务属性 / 99
- 4.9.4 实现分析 / 100
- 4.10 服务钩子 / 101
- 4.10.1 EventListenerHook / 101
- 4.10.2 FindHook / 101
- 4.10.3 ListenerHook / 102
- 4.10.4 服务钩子示例 / 102
- 4.11 本章小结 / 105
- 第三部分 基于Equinox的OSGi应用与实践
- 第5章 Equinox启航 / 108
- 5.1 建立Equinox开发环境 / 109
- 5.1.1 建立运行环境 / 109
- 5.1.2 建立编译及调试环境 / 110
- 5.1.3 建立开发环境 / 112
- 5.2 Equinox常用组件简介 / 117
- 5.3 Equinox启动器 / 119
- 5.4 使用代码启动Equinox / 124
- 5.5 本章小结 / 125
- 第6章 Equinox基础应用与源码解析 / 126
- 6.1 实践项目—Neonat论坛 / 126
- 6.1.1 背景与需求 / 126
- 6.1.2 模块划分 / 127
- 6.1.3 基础资料模块 / 129
- 6.1.4 持久化模块 / 133
- 6.1.5 用户交互模块 / 135
- 6.1.6 运行效果 / 140
- 6.2 Equinox源码解析 / 142
- 6.2.1 OSGi容器启动 / 142
- 6.2.2 Bundle状态恢复 / 147
- 6.2.3 解析Bundle依赖关系 / 153
- 6.2.4 OSGi类加载器实现 / 157
- 6.3 本章小结 / 162
- 第7章 服务器端OSGi / 163
- 7.1 OSGi与Web服务器 / 163
- 7.2 HTTP Service规范简介 / 166
- 7.2.1 服务目标 / 166
- 7.2.2 服务接口 / 168
- 7.2.3 资源映射规则 / 169
- 7.2.4 请求处理过程 / 171
- 7.3 实践项目—Neonat论坛的Web模块 / 171
- 7.3.1 准备依赖项 / 172
- 7.3.2 使用HTTP Service / 174
- 7.3.3 实现Web交互功能 / 176
- 7.3.4 运行效果 / 178
- 7.4 HTTP Service源码解析 / 180
- 7.4.1 BridgeServlet与OSGi容器启动 / 180
- 7.4.2 BridgeServlet与HTTP请求委派 / 186
- 7.4.3 DelegateServlet实现原理 / 188
- 7.5 本章小结 / 192
- 第8章 用户管理服务 / 193
- 8.1 User Admin服务规范简介 / 193
- 8.1.1 服务目标与基础概念 / 193
- 8.1.2 验证用户身份 / 195
- 8.1.3 验证用户权限 / 196
- 8.1.4 User Admin事件 / 197
- 8.2 实践项目—Neonat论坛用户管理模块 / 198
- 8.2.1 需求与依赖项分析 / 198
- 8.2.2 用户与用户组的实现 / 200
- 8.2.3 页面权限 / 201
- 8.2.4 用户登录与身份验证 / 202
- 8.3 User Admin源码解析 / 206
- 8.3.1 用户管理实现 / 206
- 8.3.2 外部服务使用实践 / 208
- 8.4 本章小结 / 211
- 第9章 Preferences服务 / 212
- 9.1 Preferences服务规范简介 / 212
- 9.1.1 服务目标 / 212
- 9.1.2 数据结构 / 214
- 9.1.3 属性 / 215
- 9.1.4 并发处理 / 216
- 9.1.5 清理遗留数据 / 217
- 9.2 实践项目—Neonat论坛持久化模块 / 217
- 9.2.1 编码实现 / 217
- 9.2.2 模块热切换 / 220
- 9.3 Preferences源码解析 / 222
- 9.3.1 数据结构实现 / 224
- 9.3.2 属性存取 / 228
- 9.3.3 后端存储系统 / 229
- 9.4 本章小结 / 234
- 第10章 声明式服务 / 235
- 10.1 声明式服务规范简介 / 236
- 10.1.1 服务目标 / 236
- 10.1.2 定义Component / 236
- 10.1.3 Component类型 / 237
- 10.1.4 Component生命周期 / 240
- 10.1.5 Component属性 / 245
- 10.1.6 绑定与发布服务 / 245
- 10.1.7 激活与钝化方法 / 252
- 10.1.8 Component配置总结 / 254
- 10.2 实践项目—使用声明式服务改造Neonat论坛 / 259
- 10.2.1 可视化编辑工具 / 259
- 10.2.2 DS容器管理 / 263
- 10.3 DS容器源码解析 / 264
- 10.3.1 容器启动 / 264
- 10.3.2 加载Bundle中的Component / 267
- 10.3.3 动态依赖解析 / 272
- 10.4 本章小结 / 274
- 第11章 Subsystems服务 / 276
- 11.1 服务目标 / 276
- 11.2 Subsystem格式 / 277
- 11.3 Subsystem元数据 / 278
- 11.3.1 SUBSYSTEM.MF标识 / 278
- 11.3.2 DEPLOYMENT.MF标识 / 281
- 11.4 Subsystem类型与共享策略 / 283
- 11.5 组织管理Subsystem / 285
- 11.6 Subsystem部署与依赖策略 / 289
- 11.7 Subsystem生命周期 / 291
- 11.7.1 安装 / 292
- 11.7.2 解析 / 293
- 11.7.3 启动 / 294
- 11.7.4 停止 / 294
- 11.7.5 卸载 / 295
- 11.8 本章小结 / 295
- 第四部分 最佳实践
- 第12章 OSGi最佳实践 / 298
- 12.1 Bundle相关名称命名 / 298
- 12.2 Bundle划分原则 / 300
- 12.2.1 恰如其分地分配Bundle粒度 / 300
- 12.2.2 分离OSGi代码 / 300
- 12.2.3 分离接口和实现 / 300
- 12.3 依赖关系实践 / 301
- 12.3.1 依赖分析工具 / 301
- 12.3.2 避免Require-Bundle / 303
- 12.3.3 最小化依赖 / 304
- 12.3.4 避免循环依赖 / 304
- 12.3.5 Equinox x-*依赖 / 305
- 12.4 Equinox专有类加载机制 / 306
- 12.4.1 Buddy Loading类加载机制 / 306
- 12.4.2 ClassLoaderDelegateHook类加载机制 / 307
- 12.5 Bundle生命周期实践 / 309
- 12.5.1 启动 / 309
- 12.5.2 停止 / 309
- 12.6 服务工厂的特殊性 / 309
- 12.7 处理非OSGi的JAR包 / 311
- 12.8 启动顺序实践 / 313
- 12.8.1 避免启动顺序依赖 / 313
- 12.8.2 Start Level的使用 / 313
- 12.9 Fragment Bundle实践 / 314
- 12.10 保持OSGi动态性 / 315
- 12.11 API Tools实践 / 317
- 12.11.1 API Baselines / 317
- 12.11.2 API Tools 注解 / 319
- 12.11.3 API Version版本管理 / 322
- 12.11.4 二进制文件不兼容 / 322
- 12.12 本章小结 / 322
- 第13章 Spring Dynamic Modules实践 / 324
- 13.1 Spring DM入门 / 324
- 13.1.1 Spring DM项目简介 / 324
- 13.1.2 安装Spring DM / 325
- 13.1.3 简单的Spring DM示例 / 326
- 13.1.4 Bundle和Spring上下文 / 331
- 13.1.5 <osgi:*>命名空间 / 333
- 13.2 Spring DM进阶 / 337
- 13.2.1 Spring DM扩展配置 / 337
- 13.2.2 Web Extender / 344
- 13.2.3 Spring DM服务约束 / 345
- 13.2.4 在Spring上下文中使用BundleContext / 346
- 13.3 Spring DM企业应用 / 346
- 13.3.1 规划OSGi组件 / 347
- 13.3.2 在Spring DM中使用JPA / 348
- 13.3.3 事务管理 / 353
- 13.3.4 OSGi企业规范中的JPA / 358
- 13.4 Spring DM和Blueprint / 359
- 13.5 本章小结 / 360
- 第14章 构建可测试的OSGi系统 / 361
- 14.1 单元测试的必要性 / 362
- 14.2 单元测试的重要性 / 363
- 14.3 可测试代码的特征 / 364
- 14.4 OSGi单元测试 / 365
- 14.4.1 如何组织测试代码 / 366
- 14.4.2 如何进行OSGi单元测试 / 367
- 14.5 OSGi集成测试 / 373
- 14.5.1 Eclipse JUnit Plug-in Test / 374
- 14.5.2 Spring DM Test / 379
- 14.5.3 Pax Exam / 383
- 14.6 本章小结 / 384
- 附录A Java类加载器简介 / 385
- 附录B Equinox控制台命令 /