深入理解OSGi

出版时间:2013-2-25  出版社:周志明、 谢小明 机械工业出版社 (2013-02出版)  作者:周志明,谢小明  
Tag标签:无  

前言

前言为什么写这本书随着软件规模的日益增大,程序按模块拆分、按模块开发和按模块部署等需求变得越来越迫切,“模块化”成为了Java社区中最热门的话题之一。而OSGi技术—Java业界事实上的模块化标准,也被越来越多的中间件、第三方类库和各类应用程序所认可和采用。与此相对的是,有关OSGi技术的资料,尤其是中文的资料却显得异常的贫乏。笔者自2007年接触OSGi以来,曾在数个大型系统中使用过OSGi作为软件的基础架构,这一方面使笔者深刻感受到了OSGi带来的诸多好处以及OSGi设计思想的魅力;另一方面也使笔者注意到OSGi的入门门槛相对较高,如果没有足够的指导材料,开发人员从零开始学习并探索出OSGi的最佳实践需要很高的成本。因此,笔者就萌生了写一本关于OSGi原理、应用与最佳实践的中文书籍的想法。自从1999年OSGi联盟成立以来,OSGi技术随着Java一起飞速发展,现已经成为一种被广泛认可的软件架构技术和方法。OSGi联盟的成员数量也已经从最开始的几个增长到目前超过100个,许多世界著名的IT企业都加入到OSGi的阵营之中,如Adobe、IBM、Oracle、SAP、RedHat和Siemens等。这些软件厂商推出的许多产品都支持OSGi技术,甚至产品本身就使用了OSGi技术构建,例如IBM的WebSphere、Lotus和JAZZ,Oracle的GlassFish和Weblogic,RedHat的JBoss,Eclipse基金会的Eclipse IDE、Equinox及之下的众多子项目,Apache基金会的Karaf、Aries、Geronimo、Felix及之下的众多子项目等。这些业界巨头的踊跃参与,从侧面证明了OSGi技术有着非常广阔的市场前景。OSGi能获得如此广泛的认可,一方面是它的诞生迎合了软件模块化的需求;另一方面是因为它足够全面和开放,OSGi所具有的动态性、伸缩性正好是许多生产系统所需的。基于OSGi的程序更新升级或者缺陷修复,能够像电脑更换USB接口的鼠标键盘或者插拔其他USB设备那样可以即插即用,无须重启,甚至无须停顿,这是许多基于Java的、需要7×24小时运转的生产系统长期以来迫切希望而又无法实现的需求。把软件开发中公用的、通用的功能抽象成标准件,令各个软件可以使用同样的模块来完成特定需求,把软件开发变为搭建模块,这更是软件工业化的最终理想,而OSGi为这个目标带来了实现的曙光。目前,虽然OSGi背后有庞大的厂商支持,对实现框架、中间件和类库的支撑也足够完善,但是在国内基于OSGi架构的系统还不是很多。很多软件企业都跃跃欲试,尝试迈出使用OSGi的第一步,但往往被其复杂性阻挡于大门之外—如果要用OSGi开发一个入门程序,并不需要多高深的知识,但如果要把OSGi运用于生产系统,则要求该软件系统的架构师和至少一部分中高级开发人员必须对OSGi有比较深入的了解,业界对这一部分人才的需求也一直非常大。通过本书,读者可以通过一个相对轻松的方式学习到OSGi的运作原理,这对自身能力的成长有较大的帮助。本书面向的读者1.系统架构师OSGi目前已经成为互联网、桌面程序、移动设备和企业级应用等领域中最流行的系统架构方法之一,OSGi本身的设计思想也非常值得系统架构师借鉴。2.使用Java技术体系的中、高级开发人员鉴于OSGi技术本身的复杂性和相对陡峭的学习曲线,开发人员入门和深入理解OSGi时要付出较多的努力,本书的理论讲解和案例实践将帮助对OSGi感兴趣的开发人员跨过初学OSGi的那道门槛。3.系统运维工程师保障系统的性能,更新和维护程序版本是系统运维工程师的主要职责。目前Java业界主流的中间件均开始直接支持甚至基于OSGi架构实现。伴随OSGi的发展,越来越多使用OSGi技术的程序被部署到生产系统之中,OSGi已经成为一个优秀的运维工程师必须了解的专业知识。本书中的大量案例、代码、调优实战将会对系统运维工程师日常的工作起到直接的参考作用。如何阅读本书本书一共分为四个部分:走近OSGi、OSGi规范与原理、基于Equinox的OSGi应用与实践、最佳实践。各个部分之间基本上是互相独立的,没有必然的前后依赖关系,读者可以从任何一个感兴趣的专题开始阅读,但是每个部分中的各个章节间会有先后顺序。本书并不要求读者在Java领域具备很高的技术水平,而且在讲解各个知识点时会在保证逻辑准确的前提下、尽量用通俗的语言和案例去讲述OSGi中与开发关系最为密切的内容、但是由于探讨OSGi过程中涉及的许多问题不可避免地需要读者有一定技术基础,因此本书的定位依然是面向中、高级的程序员群体,对于一些常用的开发框架、Java API、Java语法等基础知识点,将认为读者已有所了解。下面简要介绍一下本书各部分的内容。第一部分 走近OSGi本书第一部分为后文的研究和讲解打下一个基础,让读者了解OSGi的来龙去脉以及它出现的意义,成为走近Java技术和Java虚拟机的第一步。第一部分包括第1章:第1章 在这本书中,笔者尝试阐述与OSGi相关的三个问题:什么是OSGi?为什么要使用OSGi?如何使用OSGi?在第1章中,笔者将针对前面两个问题进行分析介绍并给出答案。第二部分 OSGi规范与原理最新的OSGi R5规范文档包含了数十个子规范、数百页的文档和近2000个API。一般的开发人员很难、也没有必要完全了解OSGi规范的所有细节。但是,要学习OSGi技术,阅读OSGi核心规范(OSGi Core)是必需的过程。在第二部分中,笔者将介绍OSGi核心规范中的内容。第二部分包括第2至4章:第2章 介绍了OSGi中模块这个最基础的概念,并讲解了OSGi如何建立模块、如何描述模块、模块间的依赖关系如何处理等内容。第3章 介绍了Bundle是如何启动的,Bundle自安装到卸载所经历的生命周期状态和这些状态的转换条件过程,还介绍了OSGi框架是如何使用启动级别对系统中的Bundle进行管理调度的。第4章 介绍了本地及远程服务定义、注册、查找和使用方法,这个过程涉及服务事件监听,以及使用服务钩子干涉服务与OSGi框架的交互过程等知识。第三部分 基于Equinox的OSGi服务应用与实践如果说OSGi核心规范是OSGi技术的灵魂,OSGi的服务纲要规范(OSGi Service Compendium)和OSGi企业级规范(OSGi Service Enterpress)就是其躯体。在第三部分中,笔者会详细介绍其中最常用的几个子规范的内容。在这一部分中,将会把OSGi技术从理论落地到实践之中,结合目前使用范围最广的OSGi实现Equinox和一个穿插整个部分的完整案例来讲解OSGi技术的使用。第三部分包括第5至11章:第5章 介绍了Equinox和OSGi的关系、Equinox的组成,以及如何获取、安装、使用和调试Equinox的代码。本章奠定了整个第三部分的技术基础。第6章 尝试实现了一个名为“Neonat”的基于Equinox框架的Telnet BBS,这个项目将迭代贯穿于第三部分。另外,还从浩瀚庞大的Equinox源码中挑选出四个关键功能点进行源码解析。读者在理解了Equinox这几个关键功能点是如何实现的之后,与前面第一部分介绍的OSGi规范的理论相互对照和印证,可以更好地理解OSGi的技术原理,知道为何要这样设计和实现。第7章 介绍了服务端OSGi的应用,分析了OSGi的HTTP Service规范的使用和原理,及如何为Neonat添加Web访问模块。第8章 介绍了OSGi的User Admin服务的基本使用,以及如何为Neonat添加用户管理模块,如何实现用户权限控制。第9章 介绍了OSGi的Preferences服务,重新实现了Neonat的数据访问模块,展示了如何使用Preferences服务来持久化非事务性数据。第10章 介绍了声明式服务的使用。声明式服务规范的制定,推动了OSGi服务从程序化的服务模型向声明式的服务模型发展,这对整个OSGi来说也是一项非常有意义的进化,令OSGi的服务真正成为一项可统一分配、使用和管理的资源。第11章 介绍了OSGi R5中最新出现的Subsystem规范,这是OSGi R5相对R4.3最重要的改进。在制定了Subsystem规范(及其相关的Respository和Resolver等规范)后,表明OSGi对企业级开发的支持已经达到相当完善的程度了。Subsystem让各个软件厂商的OSGi企业级容器有了通用的程序发布格式,让OSGi支持者能向同一个方向努力,推动企业级OSGi的发展,这点将是有深远影响的。第四部分 最佳实践学习过OSGi的原理、规范和各种服务的使用后,第四部分笔者将针对开发实践中遇到的具体问题进行分析、讲解,介绍OSGi的各种最佳实践。第四部分包括12至14章:第12章 介绍了OSGi的最佳实践,包括Bundle命名方法、模块划分、依赖关系处理、保持OSGi动态性、管理程序启动顺序、使用API基线管理模块版本等各方面的实践技巧。第13章 介绍了Spring DM的原理、使用,以及如何把基于Spring的程序引入到OSGi环境之中。第14章 讲解了单元测试和集成测试在OSGi程序中的意义,展示了在OSGi环境中如何进行程序测试,以及相关测试工具的使用。勘误和支持在本书交稿的时候,笔者并没有想象中那样兴奋或轻松,在写作之时那种“战战兢兢、如履薄冰”感觉依然萦绕在心头。在写作过程中,在每一章、每一节落笔之时,笔者都在考虑如何写才能把这个知识点有条理地讲述出来,都在担心会不会由于自己理解有偏差而误导了大家。囿于作者水平和写作时间,书中存在不妥之处在所难免,所以特别开辟了一个读者邮箱,读者有任何意见、建议都欢迎与笔者联系。另外,读者可以从华章公司的网站本书的相应页面下载书中所涉及的源码。写书与写程序一样,作品一定都有不完美之处,因为不完美,我们才有不断追求完美的动力。

内容概要

本书是原创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环节中进行程序测试。

作者简介

周志明,资深Java技术专家,对JavaEE企业级应用开发、OSGi、Java虚拟机和工作流等都有深入的研究,并在大量的实践中积累了丰富的经验。尤其精通Java虚拟机,撰写了大量与JVM相关的经典文章,被各大技术社区争相转载,是ITeye等技术社区公认的Java虚拟机方面的领袖人物之一,著有经典著作《深入理解Java虚拟机:JVM高级特性与最佳实践》(2年内重印十数次,获得业界多个图书奖项),广获读者好评。现任远光软件股份有限公司平台开发部经理兼平台架构师,先后参与过国家电网、南方电网等多个国家级大型ERP项目的平台架构工作,对软件系统架构也有深刻的认识和体会。谢小明,资深Java技术专家,具有丰富的JavaEE企业级应用开发开发经验,对OSGi、Spring、Hibernate等技术和框架有比较深入的研究和认识。喜欢钻研运行与JVM之上的其他语言,如Scala和Clojure等。现任远光软件股份有限公司平台开发部平台架构师,先后参加与过国家电网、南方电网等多个国家级大型ERP项目的平台架构工作。

书籍目录

前言第一部分 走近OSGi第1章 Java模块化之路 21.1 什么是OSGi 21.1.1 OSGi规范的演进 41.1.2 Java模块化规范之争 71.2 为什么使用OSGi 111.2.1 OSGi能让软件开发变得更容易吗 121.2.2 OSGi能让系统变得更稳定吗 131.2.3 OSGi能让系统运行得更快吗 141.2.4 OSGi能支撑企业级开发吗 151.3 本章小结 16第二部分 OSGi规范与原理第2章 模块层规范与原理 182.1 OSGi规范概要 182.2 Bundle 202.3 描述元数据 212.3.1 预定义标记 212.3.2 使用可视化工具 272.4 Bundle的组织与依赖 312.4.1 导出和导入Package 312.4.2 约束规则与示例 382.4.3 校验Bundle有效性 442.5 OSGi的类加载架构 452.5.1 父类加载器 462.5.2 Bundle类加载器 472.5.3 其他类加载器 492.5.4 类加载顺序 502.6 定义执行环境 512.7 本地化 542.8 本章小结 55第3章 生命周期层规范与原理 563.1 Bundle标识 563.2 Bundle状态及转换 573.2.1 安装过程 593.2.2 解析过程 613.2.3 启动过程 623.2.4 更新过程 633.2.5 停止过程 643.2.6 卸载过程 653.3 启动级别 653.3.1 设置启动级别 663.3.2 调整活动启动级别 673.4 事件监听 683.4.1 事件类型 693.4.2 事件分派 703.5 系统Bundle 713.6 Bundle上下文 723.7 本章小结 73第4章 服务层规范与原理 744.1 服务 744.2 OSGi服务示例 754.3 服务属性 804.3.1 属性过滤器 824.3.2 预定义属性 834.3.3 修改属性 844.4 服务工厂 854.5 服务跟踪器 864.6 引用服务 894.7 释放和注销服务 914.8 服务层事件 914.8.1 事件类型 924.8.2 事件分派 924.8.3 ServiceRegistration对象的提前请求 934.9 远程服务 944.9.1 准备远程服务环境 944.9.2 远程服务示例 964.9.3 远程服务属性 994.9.4 实现分析 1004.10 服务钩子 1014.10.1 EventListenerHook 1014.10.2 FindHook 1014.10.3 ListenerHook 1024.10.4 服务钩子示例 1024.11 本章小结 105第三部分 基于Equinox的OSGi应用与实践第5章 Equinox启航 1085.1 建立Equinox开发环境 1095.1.1 建立运行环境 1095.1.2 建立编译及调试环境 1105.1.3 建立开发环境 1125.2 Equinox常用组件简介 1175.3 Equinox启动器 1195.4 使用代码启动Equinox 1245.5 本章小结 125第6章 Equinox基础应用与源码解析 1266.1 实践项目—Neonat论坛 1266.1.1 背景与需求 1266.1.2 模块划分 1276.1.3 基础资料模块 1296.1.4 持久化模块 1336.1.5 用户交互模块 1356.1.6 运行效果 1406.2 Equinox源码解析 1426.2.1 OSGi容器启动 1426.2.2 Bundle状态恢复 1476.2.3 解析Bundle依赖关系 1536.2.4 OSGi类加载器实现 1576.3 本章小结 162第7章 服务器端OSGi 1637.1 OSGi与Web服务器 1637.2 HTTP Service规范简介 1667.2.1 服务目标 1667.2.2 服务接口 1687.2.3 资源映射规则 1697.2.4 请求处理过程 1717.3 实践项目—Neonat论坛的Web模块 1717.3.1 准备依赖项 1727.3.2 使用HTTP Service 1747.3.3 实现Web交互功能 1767.3.4 运行效果 1787.4 HTTP Service源码解析 1807.4.1 BridgeServlet与OSGi容器启动 1807.4.2 BridgeServlet与HTTP请求委派 1867.4.3 DelegateServlet实现原理 1887.5 本章小结 192第8章 用户管理服务 1938.1 User Admin服务规范简介 1938.1.1 服务目标与基础概念 1938.1.2 验证用户身份 1958.1.3 验证用户权限 1968.1.4 User Admin事件 1978.2 实践项目—Neonat论坛用户管理模块 1988.2.1 需求与依赖项分析 1988.2.2 用户与用户组的实现 2008.2.3 页面权限 2018.2.4 用户登录与身份验证 2028.3 User Admin源码解析 2068.3.1 用户管理实现 2068.3.2 外部服务使用实践 2088.4 本章小结 211第9章 Preferences服务 2129.1 Preferences服务规范简介 2129.1.1 服务目标 2129.1.2 数据结构 2149.1.3 属性 2159.1.4 并发处理 2169.1.5 清理遗留数据 2179.2 实践项目—Neonat论坛持久化模块 2179.2.1 编码实现 2179.2.2 模块热切换 2209.3 Preferences源码解析 2229.3.1 数据结构实现 2249.3.2 属性存取 2289.3.3 后端存储系统 2299.4 本章小结 234第10章 声明式服务 23510.1 声明式服务规范简介 23610.1.1 服务目标 23610.1.2 定义Component 23610.1.3 Component类型 23710.1.4 Component生命周期 24010.1.5 Component属性 24510.1.6 绑定与发布服务 24510.1.7 激活与钝化方法 25210.1.8 Component配置总结 25410.2 实践项目—使用声明式服务改造Neonat论坛 25910.2.1 可视化编辑工具 25910.2.2 DS容器管理 26310.3 DS容器源码解析 26410.3.1 容器启动 26410.3.2 加载Bundle中的Component 26710.3.3 动态依赖解析 27210.4 本章小结 274第11章 Subsystems服务 27611.1 服务目标 27611.2 Subsystem格式 27711.3 Subsystem元数据 27811.3.1 SUBSYSTEM.MF标识 27811.3.2 DEPLOYMENT.MF标识 28111.4 Subsystem类型与共享策略 28311.5 组织管理Subsystem 28511.6 Subsystem部署与依赖策略 28911.7 Subsystem生命周期 29111.7.1 安装 29211.7.2 解析 29311.7.3 启动 29411.7.4 停止 29411.7.5 卸载 29511.8 本章小结 295第四部分 最佳实践第12章 OSGi最佳实践 29812.1 Bundle相关名称命名 29812.2 Bundle划分原则 30012.2.1 恰如其分地分配Bundle粒度 30012.2.2 分离OSGi代码 30012.2.3 分离接口和实现 30012.3 依赖关系实践 30112.3.1 依赖分析工具 30112.3.2 避免Require-Bundle 30312.3.3 最小化依赖 30412.3.4 避免循环依赖 30412.3.5 Equinox x-*依赖 30512.4 Equinox专有类加载机制 30612.4.1 Buddy Loading类加载机制 30612.4.2 ClassLoaderDelegateHook类加载机制 30712.5 Bundle生命周期实践 30912.5.1 启动 30912.5.2 停止 30912.6 服务工厂的特殊性 30912.7 处理非OSGi的JAR包 31112.8 启动顺序实践 31312.8.1 避免启动顺序依赖 31312.8.2 Start Level的使用 31312.9 Fragment Bundle实践 31412.10 保持OSGi动态性 31512.11 API Tools实践 31712.11.1 API Baselines 31712.11.2 API Tools 注解 31912.11.3 API Version版本管理 32212.11.4 二进制文件不兼容 32212.12 本章小结 322第13章 Spring Dynamic Modules实践 32413.1 Spring DM入门 32413.1.1 Spring DM项目简介 32413.1.2 安装Spring DM 32513.1.3 简单的Spring DM示例 32613.1.4 Bundle和Spring上下文 33113.1.5 命名空间 33313.2 Spring DM进阶 33713.2.1 Spring DM扩展配置 33713.2.2 Web Extender 34413.2.3 Spring DM服务约束 34513.2.4 在Spring上下文中使用BundleContext 34613.3 Spring DM企业应用 34613.3.1 规划OSGi组件 34713.3.2 在Spring DM中使用JPA 34813.3.3 事务管理 35313.3.4 OSGi企业规范中的JPA 35813.4 Spring DM和Blueprint 35913.5 本章小结 360第14章 构建可测试的OSGi系统 36114.1 单元测试的必要性 36214.2 单元测试的重要性 36314.3 可测试代码的特征 36414.4 OSGi单元测试 36514.4.1 如何组织测试代码 36614.4.2 如何进行OSGi单元测试 36714.5 OSGi集成测试 37314.5.1 Eclipse JUnit Plug-in Test 37414.5.2 Spring DM Test 37914.5.3 Pax Exam 38314.6 本章小结 384附录A Java类加载器简介 385附录B Equinox控制台命令 392附录C OSGi子规范目录 397附录D OSGi相关项目 399附录E Equinox启动配置参数 401

编辑推荐

《深入理解OSGi:Equinox原理、应用与最佳实践》基于最新OSGi R5.0规范撰写,继《深入理解Java虚拟机》后的又一实力之作,全面解读OSGi规范,深刻揭示OSGi原理,详细讲解OSGi服务,系统地介绍Equinox框架的用法,并通过源代码分析其工作机制,包含大量可操作性极强的解决方案和最佳实践。

图书封面

图书标签Tags

评论、评分、阅读与下载


    深入理解OSGi PDF格式下载


用户评论 (总计0条)

 
 

 

250万本中文图书简介、评论、评分,PDF格式免费下载。 第一图书网 手机版

京ICP备13047387号-7