本书是原创Java技术图书领域继《深入理解Java虚拟机》后的又一实力之作,也是全球首本基于最新OSGi R5.0规范的著作。理论方面,既全面解读了OSGi规范,深刻揭示了OSGi原理,详细讲解了OSGi服务,又系统地介绍了Equinox框架的使用方法,并通过源码分析了该框架的工作机制;实践方面,不仅包含一些典型的案例,还总结了大量的最佳实践,极具实践指导意义。
全书共14章,分4个部分。第一部分(第1章):走近OSGi,主要介绍了什么是OSGi以及为什么要使用OSGi。第二部分(第2~4章):OSGi规范与原理,对最新的OSGi R5.0中的核心规范进行了全面的解读,首先讲解了OSGi模块的建立、描述、依赖关系的处理,然后讲解了Bundle的启动原理和调度管理,最后讲解了与本地及远程服务相关的内容。第三部分:OSGi服务与Equinox应用实践(第5~11章),不仅详细讲解了OSGi服务纲要规范和企业级规范中最常用的几个子规范和服务的技术细节,还通过一个基于Equinox的BBS案例演示了Equinox的使用方法,最重要的是还通过源码分析了Equinox关键功能的实现机制和原理。第四部分:最佳实践(第12~14章),总结了大量关于OSGi的最佳实践,包括从Bundle如何命名、模块划分、依赖关系处理到保持OSGi动态性、管理程序启动顺序、使用API基线管理模块版本等各方面的实践技巧,此外还介绍了Spring DM的原理以及如何在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
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控制台命令 / 392
附录C OSGi子规范目录 / 397
附录D OSGi相关项目 / 399
附录E Equinox启动配置参数 / 401
在线社交网络分析 本书特色 本书从在线社交网络的“结构与演化—群体与互动—信息与传播”三个方面展开,系统、深入地阐述了在线社交网络分析中的基础理论、关键方法和技...
《乐迷闲话》内容简介:《乐迷闲话》作为辛丰年的第一本音乐随笔著作,曾经启蒙了一代西方古典音乐乐迷。虽是“闲话”,其实“有根
不同于以往任何时期,如今我们进入了大数据的信息时代。利用合适的工具,我们可以探索数据的价值和意义,挖掘数据背后的模式及其
Progressiveenhancementisanapproachtowebdevelopmentthataimstodeliverthebestpossib...
《从零开始做播客》内容简介:在本书中,您将会学习哪种设备在何种预算下最适合播客,哪种软件最适合录制,还有一些关于开发播客节
《品中国文人1》内容简介:中国历史漫长而丰富。中国很早就有记载自己民族历史的优秀传统。本书尝试着从中国历代大文人的角度来勾画
《EDIUS Pro 8基础培训教程》内容简介:本书全面系统地介绍了EDIUS Pro8软件的基本操作方法和视频编辑与剪辑技巧,详细讲解了EDIUS
《精通CSS网布布局》深入、系统地讲解了使用css进行网页布局设计的相关知识和技巧,内容包括css基础、文字和版式设计、图像控制、
NeedtoLearnMATLAB?ProblemSOLVED!GetstartedusingMATLABrightawayw...
《神经网络权值直接确定法》提出了一种神经网络权值直接确定的方法。不同于传统的神经网络迭代学习思想,新方法可以一步直接计算
《鬼谷子的局·第4季:鏖战中原(全两册)》内容简介:战国时期,在一座叫清溪鬼谷的山上(今河南省鹤壁市),隐居着一位被尊称为“
SarahAllen目前领导着BlazingCloud,这是一家位于旧金山的咨询公司,主要开发高级的移动和Web应用程序。她也是Mightyverse的共同
中文版3dsMAX8实训教程-影视片头动画(赠光盘一张) 本书特色 本书是快速学习和掌握3ds MAX 8动画制作的指导书,*大的特点在于将知识点与实例相结合,...
很多事物中都存在组成(成分、构成)问题。作者创立的组成论为此提供统一的认识模型、分析工具、计算方法和原理。它通过广义集合
魏玛时期的包豪斯,是20世纪最重要的建筑、设计及艺术学校之一,莫霍利-纳吉是其个性鲜明的教员团队中的一员。他不仅是欧洲前卫运
《纸币史话》内容简介:本书从汉武帝时发行的“白鹿皮币”和唐宪宗时期的“飞钱”谈起,梳理了中国古代纸币历经宋、金、元、明、清
《做东:酒局里的100个生存哲学》内容简介:酒局是阴谋四伏的人性的斗争舞台,是人最高生存智慧的展示场所。《做东》是第一本最全面
《颠覆式学习》内容简介:人工智能的进步咄咄逼人,似乎在不远的未来将让我们中的许多人失业。但我们当然不想坐以待毙,而且我们还
《汉英科技翻译》是以原汁原味的英语原文作为译文这样的创新思维构思的,采用了从汉语语法和英语语法的结合上阐述翻译方法这样的
计算机基础应用教程 内容简介 本书采用“任务驱动”模式编写,以完成具体案例为主线,巧妙地将知识融入每个任务之中,使学生通过完成任务来深化对知识的理解与应用,增强...