深入理解<mark>OSGi</mark>:前言

 由  IcyFenix 发布

为什么写这本书


随着软件规模的日益增大,程序按模块拆分、按模块开发和按模块部署等需求变得越来越迫切,“模块化”成为了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已经成为一个优秀的运维工程师必须了解的专业知识。本书中的大量案例、代码、调优实战将会对系统运维工程师日常的工作起到直接的参考作用。

如何阅读本书


本书一共分为4个部分:走近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源码中挑选出4个关键功能点进行源码解析。读者在理解了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环境中如何进行程序测试,以及相关测试工具的使用。

勘误和支持

在本书交稿的时候,笔者并没有想象中那样兴奋或轻松,写作之时那种“战战兢兢、如履薄冰”的感觉依然萦绕在心头。在写作过程中,在每一章、每一节落笔之时,笔者都在考虑如何写才能把这个知识点有条理地讲述出来,都在担心会不会由于自己理解有偏差而误导了大家。囿于作者水平和写作时间,书中存在不妥之处在所难免,所以特别开辟了一个读者邮箱( understandingosgi@gmail.com ),读者有任何意见、建议都欢迎与笔者联系。另外,读者可以从华章公司的网站本书的相应页面下载书中所涉及的源码,华章公司地址为:http://www.hzbook.com。写书与写程序一样,作品一定都有不完美之处,因为不完美,我们才有不断追求完美的动力。


sean 2015-06-12 14:47

怎么获取这种书籍

顶(0) 踩(0) 回复

ChengZhang 2014-04-21 09:30

OSGI作为模块化开发的基石,对Java开发者的贡献功不可没,通过论坛的介绍本书,感觉本书不错,很想获得本书,为推动模块化开发而努力学习着。

顶(0) 踩(0) 回复

hiyachen 2013-12-15 10:28

我的理解及应用:chf@tsinghua.org.cn java架构师<br>1:OSGI是SOA的另一个表现形式。同样符合组件化、接口化、即模块化、低耦合的设计思想。<br>2:面向动态模型加载、和符合AOP的思想,即组件加载无缝化。<br>3:动态加载、动态绑定,可以根据jar包不同选择不同的组件功能。<br>4:怎样动态获取服务对象及可能碰到的问题。

顶(0) 踩(0) 回复

spring 2013-09-09 22:26

回复罗俊杰: 你们有没有基于spring dm开发一个完整的web应用程序demo让大家学习一下。文章太空洞。

顶(0) 踩(0) 回复

罗俊杰 2013-09-09 15:04

回复spring: 这篇文章讲了一下spring dm http://osgi.com.cn/article/7289212

顶(0) 踩(0) 回复

spring 2013-09-09 14:00

我不想知道那些个OSGI框架是怎么实现的,你就告诉我在我的项目中怎么用就好了,一个最有用的springDM只有那么一点

顶(0) 踩(0) 回复

Alice Zhong 2013-06-06 01:15

刚看完《OSGI原理与最佳实践》,准备继续学习《深入理解OSGI》!加油!!

顶(0) 踩(0) 回复
查看评论