OSGi简介

OSGi是什么

下面来看看“维基百科”给出的解释:

OSGi(Open Service Gateway Initiative)有双重含义。一方面它指OSGi Alliance组织;另一方面指该组织制定的一个基于Java语言的服务(业务)规范——OSGi服务平台(Service Platform)。

OSGi Alliance是一个由Sun MicrosystemsIBM爱立信等于1999年3月成立的开放的标准化组织, 最初名为Connected Alliance。该组织及其标准原本主要目的在于使服务提供商通过住宅网关,为各种家庭智能设备提供各种服务。目前该平台逐渐成为一个为室内、交通工具、移动电话和其他环境下的所有类型的网络设备的应用程序和服务进行传递和远程管理的开放式服务平台。

该规范和核心部分是一个框架 ,其中定义了应用程序的生命周期模式和服务注册。基于这个框架定义了大量的OSGi服务:日志配置管理、偏好,HTTP(运行servlet)、XML分析、设备访问、软件包管理、许可管理、星级、用户管理、IO连接、连线管理、Jini和 UPnP

这个框架实现了一个优雅、完整和动态的组件模型。应用程序(称为bundle)无需重新引导可以被远程安装、启动、升级和卸载(其中Java包/类的管理被详细定义)。API中还定义了运行远程下载管理政策的生命周期管理服务注册允许bundles去检测新服务和取消的服务,然后相应配合。

OSGi原先关注于服务网关,其实可用于多个方面。现在OSGi规范已经用于从移动电话到开源的Eclipse(其中包括了与IBM的OSGi框架SMF兼容的开源版本)。 OSGi服务平台的应用包括:服务网关、 汽车移动电话、 工业自动化建筑物自动化PDA 网格计算娱乐(如iPronto)、和 IDE

OSGi规范是由成员通过公开的程序开发,对公众免费而且没有许可证限制。但是OSGi Alliance的兼容性程序只对成员开放,目前有12个兼容的实现

2003年Eclipse选择OSGi作为其插件的底层运行时架构。Equinox project对该理念进行了实验,2004年6月在Eclipse3 R3中发布。ProSyst是面向OSGi开发者的Eclipse插件。

2003年10月, 诺基亚摩托罗拉ProSyst 和其他OSGi成员组建了Mobile Expert Group (MEG)为下一代智能手机规范业务平台,做为对 MIDP 和CDC的补充。

OSGi的主要职责就是为了让开发者能够建动态化、模块化的Java系统。

OSGi的组成

通常,OSGi 框架从概念上可以分为三层:模块层、生命周期层和服务层。各层的主要功能如下:

<!--[if !supportLists]-->Ø  <!--[endif]-->Module Layer —— 模块层主要涉及包及共享的代码;

<!--[if !supportLists]-->Ø  <!--[endif]-->Lifecycle Layer —— 生命周期层主要涉及 Bundle 的运行时生命周期管理;

<!--[if !supportLists]-->Ø  <!--[endif]-->Service Layer —— 服务层主要涉及模块之间的交互和通信。

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="http://static.oschina.net/uploads/img/201111/18175002_MIP6.jpg" style='width:359.25pt;height:280.5pt'> <v:imagedata src="file:///C:\Users\itway\AppData\Local\Temp\msohtmlclip1\01\clip_image001.jpg" o:href="http://static.oschina.net/uploads/img/201111/18175002_MIP6.jpg" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

OSGi 层次结构

模块层

Bundle 是 OSGi 中的基本组件,其表现形式仍然为 Java 概念中传统的 Jar 包,同时通过 META-INF 目录下的 MANIFEST.MF 文件对其予以进一步的定义。通常一个 MANIFEST.MF 文件的内容如下所示:

Manifest-Version: 1.0

Bundle-ManifestVersion: 2

Bundle-Name: Util

Bundle-SymbolicName : com.ibm.director.la.util

Bundle-Version : 1.0.0.qualifier

Bundle-Activator : com.ibm.director.la.util.Activator

Bundle-Vendor : IBM

Bundle-RequiredExecutionEnvironment : JavaSE-1.6

Import-Package : org.osgi.framework;version="1.3.0"

Bundle-ActivationPolicy : lazy

Export-Package : com.ibm.director.la.util;uses:="org.osgi.framework"

Bundle-ClassPath : libs/jfreechart-1.0.13-swt.jar,

libs/jfreechart-1.0.13.jar,

libs/jfreechart-1.0.13-experimental.jar

MANIFEST.MF 文件示例

也就是说,MANIFEST.MF文件存储的实际上是 Bundle的元数据,元数据的内容能够精确的定义 Bundle的各种特征,同时能够更好的对 Bundle进行标识同时帮组用户的对 Bundle进行理解。例如,通过配置 Import-Package可以指明当前 Bundle 需要哪些其他的包,而通过配置Export-Package则可以表示当前 Bundle 的哪些package对外部可见。不难理解,通过这种方式可以有效的对 Bundle 内部和外部进行隔离。其他更多配置请参考相关资料。

Bundle可以被动态地安装、启动、停止和卸载。

Bundle是服务(Service)和组件(Component)的载体。

在OSGi中,每个Bundle都有自己独立于其他Bundle的ClassLoader,正因为这样,各个Bundle内部的类是隔离的。

Bundle之间的交互方式:

1.通过Package的Export(对外暴露自己的一个或多个package)和Import(导入别人的一个或多个package)来进行。

2.通过Service的方式进行。一个Bundle作为Service提供方,对外提供Servcie .使用者可以查找到提供的Service. 并使用这个ServÎce. 而提供/使用Service又存在两种方式:一种是经典的做法,通过BundlcContext ( Bundle 的上下文)来提供和获取.一种是使用Declarative Service来实现.

生命周期层

Bundle的生命周期被OSGi框架所管理,具有如下几个状态:INSTALLED 、RESOLVED 、UNINSTALLED 、STARTING、ACTIVE、STOPPING.状态之间的转换关系如下图:

<!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" style='width:413.25pt;height:287.25pt'> <v:imagedata src="file:///C:\Users\itway\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

Bundle状态转换关系图

服务层

一个OSGi Service就是注册到OSGi框架中的一个Java对象。这注册的时候可以设置这个Service的属性。而在获取Service的进候可以根据属性进行过虑(Filter),Bundle可以通过Bundle的上下文去注册Service或去查询Service。

<!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75" style='width:364.5pt;height:141pt'> <v:imagedata src="file:///C:\Users\itway\AppData\Local\Temp\msohtmlclip1\01\clip_image004.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

服务模型示例图

Service-Oriented Component Model (SOCM)

首先来看Component 的慨念.Component和Service 从定义上看差不多,任何-个普通的J ava对象都可以通过配置文件中的定义而变为一个Component.Component对外提供了服务并且可以使用其他Component提供的服务,Component 的生命周期被OSGi 框架所管理.我们可以看到,Component是提供和使用服务的另外一种方式,并且具有生命周期.

SOCM 在字面上的意思就是面向服务的组件模型.在这个模型中.Component是服务的载体,提供对外使用的服务并可能使用外部的服务,而Component存在于Bundle 之中,系统由多个Bundle 组成.

<!--[if gte vml 1]><v:shape id="_x0000_i1028" type="#_x0000_t75" style='width:412.5pt;height:230.25pt'> <v:imagedata src="file:///C:\Users\itway\AppData\Local\Temp\msohtmlclip1\01\clip_image006.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

SOCM示意图

Declarative Service (DS)

Declarative Service (DS)是OSGi Core Framework 的一个标准服务。DS让我们在Bundle中定义Component,通过配置的方式发布服务、获取服务,以帮助我们实现前面提到的SOCM。有了DS,我们就可以按照Component+Service的方式进委系统的设计与开发。

OSGi简介的更多相关文章

  1. OSGI企业应用开发(一)OSGI简介

    一.OSGI简介 OSGI全称为Open Service Gateway Initiative(开放服务网关规范),有两个层面的含义,一方面它指OSGi Alliance组织:另一方面指该组织制定的一 ...

  2. OSGI简介(转)

    原文地址 目前,业内关于OSGI技术的学习资源或者技术文档还是很少的.我在某宝网搜索了一下“OSGI”的书籍,结果倒是有,但是种类少的可怜,而且几乎没有人购买.因为工作的原因我需要学习OSGI,所以我 ...

  3. OSGI简介—HelloWorld

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wanghuan203/article/details/13631713 本次介绍的 HelloWor ...

  4. osgi与webservice

    osgi简介: http://osgia.com/ http://blog.csdn.net/xiaokui008/article/details/9662933 http://wdhdd889.it ...

  5. OSGI介绍

    OSGI介绍 OSGI简介 OSGI (Open Service Gateway Initiative)联盟成立于1999 年,它是一个非盈利的国际组织,旨在建立一个开放的服务规范,为通过网络向设备提 ...

  6. OSGi学习-总结

    本文是osgi实战一书的前几章读书总结 1.  OSGi简介 Java缺少对高级模块化的支持,为了弥补Java在模块化方面的不足,大多数管理得当的项目都会要求建立一整套技术,包括: 适应逻辑结构的编程 ...

  7. [插件化开发] 1. 初识OSGI

    初识 OSGI 背景 当前product是以solution的方式进行售卖,但是随着公司业务规模的快速夸张,随之而来的是新客户的产品开发,老客户的产品维护,升级以及修改bug,团队的效能明显下降,为了 ...

  8. osgi.net框架简介

    osgi.net是一个动态的模块化框架.它向用户提供了模块化与插件化.面向服务构架和模块扩展支持等功能.该平台是OSGi联盟定义的服务平台规范移植到.NET的实现. 简介 尤埃开放服务平台是一个基于. ...

  9. OSGI(面向Java的动态模型系统)

    基本简介编辑 OSGI服务平台提供在多种网络设备上无需重启的动态改变构造的功能.为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方.OSGi联 O ...

随机推荐

  1. Redis简介以及数据类型存储

    由于我们在大型互联网项目当中,用户访问量比较大,比较多,会产生并发问题,对于此,我们该如何解决呢,Redis横空出世,首先,我们来简单的认识一下Redis,详细介绍如下所示: Redis是一个开源的, ...

  2. 【Unity Shaders】使用CgInclude让你的Shader模块化——使用#define指令创建Shader

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  3. tomcat服务器虚拟目录的映射方式

    lWEB应用程序指供浏览器问的程序,通常也简称为web应用 l l一个web应用由多个静态web资源和动态web资源组成,如: •html.css.js文件 •jsp文件.servlet程序.支持ja ...

  4. Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案

     IIndexDao package com.ucap.netcheck.dao; import com.ucap.netcheck.combination.beans.IndexCombinat ...

  5. Zeroc Ice原理介绍

    Ice介绍         Ice(Internet Communications Engine)是ZeroC公司的杰作,继承了CORBA的血统,是新一代的面向对象的分布式系统中间件.Ice是RPC通 ...

  6. phantomjs的使用+Java代码+依赖js(兼容Linux和windows版本)

    1.  在使用phantomjs的时候需要下载phantomjs,网上有window版本和Linux版本.将phantomjs放在Linux上的指定位置之后(如下面的/home/tpl/phantom ...

  7. Awards and Certifications @EMC

    1. Awards 1.1 Jun. 12, 2012, Accurev Migration 1.2 Oct. 16, 2012, Deliver Inyo RTM to Rockies 1.3 Ju ...

  8. pig脚本的参数传入,多个参数传入

    pig脚本里传入参数,命令如下 pig -p year=2014 -f test_parm.pig 也可以 pig -f test_parm.pig -p year=2014 -f后面必须紧跟脚本名称 ...

  9. Google的两种广告推广方式

    1搜索关键字广告推送:AdWords: 覆盖广泛:在全球最大的搜索和网络平台上进行推广. 定位精准:锁定目标客户群体,让潜在客户轻松找上门. 成本可控:仅当用户点击广告时,您才支付费用. 2.网站内容 ...

  10. Dynamics CRM2011/2013 站点地图sitemap的翻译

    实体.属性字段.ribbon等的翻译可以通过解决方案来解决(具体可见我前面的博客:http://blog.csdn.net/vic0228/article/details/37690913),但解决方 ...