OSGi

http://zhidao.baidu.com/question/4918483

第一章 引言

OSGi (Open Service Gateway Initiative) 最初的目的就是为各种嵌入式设备提供通用的软件运行平台,即可以屏蔽设备操作系统与硬件区别的中间件平台。PC基本上被 Wintel架构垄断,运行在PC上的应用程序完全可以在另一台PC上运行;但对于其他设备来说就不同,它们的硬件平台可能完全不同,其操作系统也是来自不同厂商,所以任何设备上的应用程序都需要定制,于是就产生了对中间件平台的需求。

OSGi并不是专为家庭网络而制定的,除了住宅网关,像车载电脑等其他移动嵌入式设备也都可以通过OSGi接入Internet,获取不同的应用服务。它为服务供应商、软件供应商、网关开发人员以及设备供应商提供了一个开放、通用的架构,使它们能互动地开发、部署和管理服务。其软件环境基于Sun的 JAVA虚拟机,并不涉及具体的连接协议。对于任何新设备,它都能够灵活地将其纳入现有网络。可以使用OSGi的对象包括各种数字和模拟的机顶盒、服务网关、有线电视电缆调制解调器、消费类电子产品、PC、工业计算机、汽车等。

因为OSGi基于JAVA技术,而JAVA最大的好处就是平台无关性。在不同类型的住宅网关设备上都可以实现OSGi软件。而且OSGi规范可以与各种设备访问标准桥接, 比如遵循OSGi的系统可以很好地部署和管理Jini服务,它可以提供Jini设备与服务提供商之间的交互。对于像 HAVi、UPnP等基于非JAVA技术的标准和规范,OSGi也可以提供与它们沟通的桥梁。

第二章 OSGi规范介绍

2.1 OSGi规范的体系结构

在OSGi规范中提供了一个参考的体系架构1,也基本上体现了OSGi的设计初衷。

OSGi的体系架构是基于这样一个模型的: 经营者管理着一个潜在的巨大的服务网络平台。OSGi规范假设这个服务平台是完全被这个经营者控制,并且经营者使用该服务平台去运行来自不同服务提供者提供的服务。然而这只是一个场景,还有其他模型,例如PC机的部署,工业应用 (如,移动电话基站是一个管理中心完全控制着各个方面) ,中间件模型等。OSGi最广泛的应用是在网络化的服务。除了参考模型之外,规范之中还提到了其他的一些模型。请参考OSGi 3.0规范1

2.1.1 OSGi参考体系架构的特点

1. 商业驱动: 经营者的观点驱动OSGi的体系架构。

2. 完美: 体系架构必须是足够完善和详细的,以致允许开发商生产出健壮的产品。

3. 不受限的: 由于经营者所操作的服务平台在性能和网络环境的变化是非常大的。

4. 开放: 标准不是为一个具体的系统而设计的,OSGi参考体系架构必须考虑和支持许多不同的场景。

2.1.2 OSGi参考体系架构所涉及到实体

  1. 服务平台: 一个JAVA虚拟机的实例,一个OSGi框架结构,和运行着的服务包的集合。

  2. 服务平台服务器(SPS): 驻留一个或多个服务平台的硬件。

  3. 运营商: 掌控许多服务平台的组织。

  4. 服务应用: 一套软件包,文档和支撑软件所组合起来的应用,这些应用向终端用户提供服务。

  5. 服务用户: 获取服务应用服务的用户。

  6. 服务提供者: 开发服务应用并且通过服务部署管理器部署到服务平台上。

  7. 服务部署管理器: 部署和部分管理一个或多个服务提供者提供的服务应用。

  8. 服务运行支持: 支撑软件和硬件,它们并不驻留在服务平台服务器上,但是在运行服务应用时需要它们。

  9. 服务集成者: 负责确保来自不同服务提供者的服务应用的集成。

  10. 服务开发者: 开发服务应用。

  11. 制造商: 制造服务平台服务器

  12. 拥有者: 服务平台服务器拥有者。

  13. 收费提供者: 接受帐户信息,并且提供统一的帐单给服务消费者。

  14. 网络提供者: 提供服务平台的网络链接。

  15. 证书授权: 管理证书的组织,这些证书被用来鉴别系统,个人和组织。

首先是制造商制造服务平台服务器,拥有者从制造商处购买服务平台服务器,网络提供商提供服务平台服务器和互联网的接入。服务平台的运营商使用网路提供者的接入基础件接入服务平台服务器,同时服务平台经营者控制着一个或多个运行在服务平台服务器的服务平台。另一方面,服务平台经营者许可服务部署管理器去部署服务应用到服务平台上。

其次服务开发者开发服务应用,一个服务应用可能包含多个服务包而这些服务包是真正运行在服务平台上的。服务提供者从服务开发者处得到服务应用并且可能会委托服务运行支撑系统去支撑该服务应用在服务平台上的运行。服务集成者将服务提供者获取的服务应用和支持系统集成起来由服务部署管理器部署到服务平台上。

最后服务消费者订阅服务提供者提供的服务。

更有意思的是这里还有一个服务用户实体,从图中可以看出服务消费者可以包含多个服务用户,服务用户是真正接受服务的实体。也就是说服务消费者是一个虚的实体,多个服务用户可以消费同一个服务消费者订阅的服务。这好比不同的人可以通过同一个电话打电话一样。这无疑提高了OSGi规范灵活性。

OSGi是什么

OSGi亦称做Java语言的动态模块系统,它为模块化应用的开发定义了一个基础架构。OSGi容器已有多家开源实现,比如Knoflerfish、Equinox和Apache的Felix。您可以通过这些容器,把您的应用程序劈分为多个模块单元,这样,您就可以更容易地管理这些模块单元之间的交叉依赖关系。

OSGi规范和Servlet规范及EJB规范类似,该规范定义了两种对象,一是容器对外提供的服务对象,另一个是容器和您的应用程序之间必须遵守的契约,其中,服务对象是容器要实现的。您如果想要在OSGi平台上进行开发,首先,您必须要使用OSGi API来创建您的应用,然后将之部署到OSGi容器中。从开发者的角度看,OSGi具有以下优点:

a) 您可以在不重启容器的情况下,动态地安装、卸载、启动和停止您的应用程序中的不同模块;

b) 对于您应用程序中的某一特定模块,容器可以同时运行该模块的多个版本;

c) OSGi为开发嵌入式应用、移动应用、富互联网应用(RIA)提供了非常优秀的基础架构

如果说您使用Servlet容器开发您的网络应用,使用EJB容器开发交易式应用,您可能会问,为什么我们还需要另外的容器呢?对这个问题的简短回答是,OSIG容器是专门为开发复杂的Java应用准备的,在这些应用的开发过程中,您非常需要将这些应用分割为一个个的模块。在本系列以后的文章中,我将针对这个问题进行展开并深入回答。

1. OSGi在企业开发中的应用

OSGi联盟(OSGiAlliance)于1999年3月开始着手制定OSGi规范,其主要目的就是要制定一套开放式标准,以便向局域网及其中的设备提供可管理的服务;其基本思路是,一旦您在网络设备 (如服务器和嵌入式设备) 上使用了OSGi服务平台,您就可以在网络上的任何地方管理这些设备上运行的软件组件的生命周期,可以在后台对这些组件进行安装、升级或卸载,但不需要打断该设备的正常运行。

近年来,OSGi技术在嵌入式系统及网络设备市场得到广泛应用。现在,由于Eclipse的成功,OSGi在企业开发中逐渐成为切实可行的、较有价值的一种技术。

1.1. 业界对OSGi的支持逐渐上升

2003年,Eclipse开发团队开始想办法提高Eclipse工具集的模块化,以便让它成为更加动态的富客户端平台。Eclipse团队最终选中OSGi框架作为其组件的运行时模型,2004年6月发布的Eclipse3.0就是第一个基于OSGi平台的版本。现在几乎所有的企业应用服务器都支持OSGi,Spring也通过一个叫"OSGi服务平台上的Spring动态模型(亦称之为OSGiSpring)“的项目来支持OSGi。该项目提供OSGi基础架构,以便我们在Spring的企业开发中更容易使用OSGi。

2. 开放源码的OSGi容器

从企业开发者的角度看,OSGi容器的要求很低,您可以很容易地把它嵌入到企业应用中,比如我们在开发Web应用时,我们可以把这个Web应用分为多个模块,一个模块负责视图层,另一个模块负责DAO层,第三个模块负责数据访问层,如果我们使用OSGi容器来管理这些模块之间的交叉依赖,我们就可以在不用重启该Web应用的前提下,将DAO层从速度较慢的升级到速度较快的DAO。

只要您的应用和OSGi规范兼容,您的应用就应该可以运行在任何OSGi容器中,现在比较流行的开放源码的OSGi容器有以下三种:

a) Equinox容器是参照OSGi规范第4版实现的,它构成了Eclipse IDE的核心—模块化的Java运行时;它实现了OSGi规范4中规定的必须强制实现的功能,同时,它也实现了OSGi规范中大部分的可选功能;

b) Knoflerfish是OSGi规范第3版和第4版的开源实现,它实现了OSGi规范规定的必须实现的功能及部分可选功能;

c) Apache的Felix是Apache软件基金会实现的OSGi开源容器,至本文截稿时为止,该容器还没有和OSGi规范完全兼容。在本文中,我们将使用Equinox作为我们的OSGi容器。

对OSGi是什么的介绍就先到这里,下面的部分将继续介绍OSGi的基础知识。