《OSGi实战 OSGi规范制定者亲自撰写 汇集Apache项目技术实战经验》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:(美)RichardS.HallKarlPaulsStuartMcCullochDavidSavage著;郭庆,李楠,李守超,谢莹莹,张磊译;张晋锋,梁晓湛审
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2013
  • ISBN:9787115300676
  • 页数:468 页
图书介绍:为了弥补OSGi规范在应用指导方面的不足,四位活跃在OSGi开发第一线的技术专家联手打造了本书。本书面向OSGi规范的使用者,系统、全面、深入地阐述OSGi的重要性及其使用方法。必要时,本书也会介绍某些技术的底层实现细节,引导读者畅游OSGi的世界。

第一部分 OSGi:模块化、生命周期和服务 2

第1章 揭开OSGi的面纱 2

1.1 OSGi的定义和目标 3

1.1.1 Java模块化的不足 3

1.1.2 OSGi能帮助你吗 6

1.2 OSGi架构概览 6

1.2.1 OSGi框架 7

1.2.2 将它们结合起来 10

1.3 Hello,world! 10

1.3.1 模块层示例 10

1.3.2 生命周期层示例 12

1.3.3 服务层示例 13

1.3.4 场景设置 15

1.4 OSGi的相关技术 16

1.4.1 Java EE 16

1.4.2 Jini 17

1.4.3 NetBeans 17

1.4.4 JMX 17

1.4.5 轻量级容器 18

1.4.6 Java业务集成 18

1.4.7 JSR 277 19

1.4.8 JSR 294 19

1.4.9 SCA 19

1.4.10 .NET 20

1.5 小结 20

第2章 精通模块化 21

2.1 什么是模块化 21

2.2 为什么使用模块化 24

2.3 模块化绘图程序 24

2.4 bundle 27

2.4.1 bundle在物理模块化中扮演的角色 28

2.4.2 bundle在逻辑模块化中扮演的角色 29

2.5 使用元数据定义bundle 30

2.5.1 可读信息 31

2.5.2 bundle标识 32

2.5.3 代码可见性 34

2.5.4 类搜索顺序 42

2.6 完成绘图程序设计 43

2.6.1 提高绘图程序的模块化 44

2.6.2 启动新的绘图程序 46

2.7 OSGi依赖解析 46

2.7.1 自动解析依赖 47

2.7.2 使用约束保证一致性 51

2.8 回顾模块化绘图程序的好处 56

2.9 小结 59

第3章 生命周期 60

3.1 生命周期管理 60

3.1.1 什么是生命周期管理 61

3.1.2 为什么需要生命周期管理 62

3.2 OSGi bundle的生命周期 63

3.2.1 将生命周期引入绘图程序 63

3.2.2 OSGi框架在生命周期中的作用 65

3.2.3 bundles激活器的清单文件条目 66

3.2.4 生命周期API 67

3.2.5 生命周期状态图 72

3.2.6 bundle缓存和框架重启 73

3.3 在bundle中使用生命周期API 74

3.3.1 配置bundle 75

3.3.2 部署bundle 76

3.3.3 检查框架状态 81

3.3.4 持久化bundle状态 82

3.3.5 事件监听 85

3.3.6 bundle自我销毁 87

3.4 动态扩展绘图程序 89

3.5 生命周期与模块化 96

3.5.1 解析bundle 96

3.5.2 刷新bundle 98

3.5.3 当更新操作没有完成更新 101

3.6 小结 103

第4章 学习服务 104

4.1 什么是服务、为什么使用服务、什么时候用服务 104

4.1.1 什么是服务 104

4.1.2 为什么使用服务 106

4.1.3 什么时候应该使用服务 109

4.1.4 什么时候不应该使用服务 110

4.1.5 仍然不确定 110

4.2 OSGi服务实战 111

4.2.1 发布服务 112

4.2.2 查找并绑定服务 114

4.3 处理动态性 117

4.3.1 避免常见的陷阱 118

4.3.2 监听服务 121

4.3.3 服务跟踪 126

4.4 在绘图示例中使用服务 129

4.4.1 定义图形服务 129

4.4.2 发布图形服务 129

4.4.3 跟踪图形服务 130

4.5 将服务关联到模块层和生命周期层 131

4.5.1 为什么不能看到我的服务 131

4.5.2 能否提供一个bundle特有的服务 132

4.5.3 应该在何时释放服务 133

4.5.4 何时注销服务 133

4.5.5 应该将接口分开打包吗 133

4.6 标准服务 134

4.6.1 核心服务 134

4.6.2 compendium服务 135

4.7 小结 136

第5章 深入分析模块化特性 138

5.1 管理导出 138

5.1.1 导入导出包 139

5.1.2 隐式导出属性 142

5.1.3 强制导出属性 143

5.1.4 导出过滤 145

5.1.5 复制导出 146

5.2 导入解耦 147

5.2.1 可选导入 147

5.2.2 动态导入 148

5.2.3 可选导入与动态导入的比较 149

5.2.4 日志示例 150

5.3 需要的bundle 153

5.3.1 声明bundle依赖关系 154

5.3.2 聚合分割包 155

5.3.3 bundle依赖的相关问题 158

5.4 将bundle划分为片段 158

5.4.1 片段 159

5.4.2 本地化中使用片段 161

5.5 处理与环境相关的问题 164

5.5.1 依赖执行环境 165

5.5.2 构建本地库 166

5.6 小结 168

第二部分 OSGi实践 170

第6章 走近bundle 170

6.1 将JAR转换成bundle 170

6.1.1 选取bundle标识 171

6.1.2 导出包 173

6.1.3 发现需要导入的包 177

6.1.4 嵌入与导入 181

6.1.5 增加对生命周期的支持 181

6.1.6 JAR文件转换为bundle的简要说明 183

6.2 分割一个应用到多个bundle 184

6.2.1 创建一个大型bundle 184

6.2.2 将代码拆分到多个bundle中 193

6.2.3 降低模块耦合 197

6.2.4 是否要转换成bundle 201

6.3 小结 204

第7章 测试应用程序 206

7.1 迁移测试到OSGi 206

7.1.1 容器内测试 207

7.1.2 创建测试bundle 208

7.1.3 覆盖所有基础 210

7.2 模拟OSGi 212

7.2.1 测试期望的行为 213

7.2.2 模拟实战 214

7.2.3 模拟意外情景 215

7.2.4 处理多线程测试 216

7.2.5 暴露竞态条件 218

7.3 OSGi高级测试 219

7.3.1 OSGi测试工具 220

7.3.2 在多个框架中运行测试 221

7.3.3 单元测试 225

7.3.4 集成测试 226

7.3.5 管理测试 228

7.4 小结 230

第8章 调试应用 232

8.1 调试bundle 232

8.1.1 调试实战 234

8.1.2 使用HotSwap解决问题 239

8.2 解决类加载相关问题 243

8.2.1 ClassNotFoundException与NoClassDefFoundError 244

8.2.2 类型转换问题 246

8.2.3 使用uses约束 247

8.2.4 同Class.forName()划清界限 249

8.2.5 线程上下文类加载器 252

8.3 追踪内存泄漏 254

8.4 悬挂服务 258

8.4.1 查找悬挂服务 259

8.4.2 防止悬挂服务 259

8.5 小结 261

第9章 管理bundle 262

9.1 包和bundle的版本控制 262

9.1.1 有效的版本控制 263

9.1.2 包的版本控制 264

9.1.3 bundle的版本控制 266

9.2 配置bundle 267

9.2.1 配置管理服务 268

9.2.2 元类型服务 276

9.2.3 首选项服务 279

9.3 延迟启动bundle 281

9.3.1 激活策略 281

9.3.2 使用激活策略 283

9.4 小结 284

第10章 管理应用 285

10.1 部署bundle 285

10.1.1 管理代理 285

10.1.2 OSGi bundle仓库 287

10.1.3 部署管理服务 294

10.2 指定bundle激活顺序 301

10.2.1 介绍启动级别服务 302

10.2.2 使用启动级别服务 303

10.3 小结 306

第三部分 高级主题 308

第11章 组件模型和框架 308

11.1 面向组件 308

11.1.1 什么是组件 309

11.1.2 为什么需要组件 310

11.2 OSGi与组件 311

11.2.1 OSGi面向服务的组件模型 311

11.2.2 改进OSGi组件模型 312

11.2.3 使用组件的绘图示例 316

11.3 声明式服务 316

11.3.1 构建声明式服务组件 317

11.3.2 使用声明式服务提供服务 318

11.3.3 利用声明式服务使用服务 319

11.3.4 声明式服务组件生命周期 324

11.4 小结 330

第12章 高级组件框架 331

12.1 Blueprint容器 331

12.1.1 Blueprint架构 332

12.1.2 用Blueprint提供服务 332

12.1.3 通过Blueprint使用服务 335

12.1.4 Blueprint组件生命周期 339

12.1.5 Blueprint高级特性 343

12.2 Apache Felix iPOJO 347

12.2.1 构建iPOJO组件 348

12.2.2 通过iPOJO提供服务 349

12.2.3 通过iPOJO使用服务 350

12.2.4 iPOJO组件生命周期 355

12.2.5 使用iPOJO实例化组件 358

12.3 混合和匹配 362

12.4 小结 364

第13章 启动和嵌入OSGi框架 365

13.1 标准启动和嵌入 365

13.1.1 框架API概览 366

13.1.2 创建框架实例 367

13.1.3 配置框架 369

13.1.4 启动框架实例 370

13.1.5 停止框架实例 371

13.2 启动框架 372

13.2.1 确定安装哪些bundle 373

13.2.2 干净地关闭 373

13.2.3 配置、创建和启动框架 374

13.2.4 安装bundle 374

13.2.5 启动bundle 375

13.2.6 启动主bundle 375

13.2.7 等待关闭 376

13.3 嵌入框架 377

13.3.1 内部还是外部 378

13.3.2 谁在控制 380

13.3.3 嵌入式框架示例 381

13.4 小结 386

第14章 确保应用程序的安全 388

14.1 使用安全或者不使用安全 388

14.2 安全:努力尝试使用 390

14.3 OSGi特定的权限 393

14.3.1 PackagePermission 393

14.3.2 BundlePermission 394

14.3.3 AdminPermission 395

14.3.4 ServicePermission 396

14.3.5 相对文件权限 397

14.4 使用条件权限管理服务管理权限 397

14.4.1 条件权限 397

14.4.2 条件权限管理服务 398

14.4.3 bundle位置条件 400

14.4.4 使用Conditional-Permission Admin 400

14.4.5 实现一个策略文件读取器 404

14.5 数字签名的bundle 405

14.5.1 学习术语 406

14.5.2 创建证书和签名bundle 406

14.5.3 BundleSignerCondition 408

14.6 本地权限 410

14.7 高级权限管理 411

14.7.1 自定义条件概览 411

14.7.2 基于日期的条件 412

14.7.3 用户输入条件 414

14.8 汇总 417

14.9 小结 421

第15章 Web应用和Web服务 422

15.1 创建Web应用 422

15.1.1 使用HTTP服务规范 424

15.1.2 使用Web应用规范 432

15.1.3 标准WAR:Web URL处理程序 436

15.2 提供和使用Web服务 437

15.2.1 提供一个Web服务 438

15.2.2 使用Web服务 441

15.2.3 发布服务 445

15.3 小结 452

附录A 构建bundle 453

附录B OSGi标准服务 466