OSGI简介

OSGI简介


OSGI (Open Service Gateway
Initiative)联盟成立于1999
年,它是一个非盈利的国际组织,旨在建立一个开放的服务规范,为通过网络向设备提供服务建立开放的标准,是开放业务网关的发起者。

OSGI联盟的初始目标是构建一个在广域网和局域网或设备上展开业务的基础平台,对OSGI
的最早设计也是针对嵌入式应用的,诸如机顶盒、服务网关、手机、汽车等都是其应用的主要环境。

由于OSGI的诸多优秀特性(可动态改变系统行为,热插拔的插件体系结构,高可复用性,高效性等等),它被应用于许多PC
上的应用开发,因此逐步为开发者所知和钟爱。现在人们对OSGI的理解已经远远不是它字面和初衷所能解释的了,称其为一个轻巧的、松耦合的、面向服务的应用程序开发框架更为确切一些。

OSGI发展到今天已经得到了众多企业、厂商、开源组织的支持,主流的Java 应用服务器(Oracle 的Weblogic、IBM的Websphere
及Sun 的Glassfish等)都已经采用了OSGI。OSGi 作为Java 模块化标准已成为事实。

OSGI著名案例

Eclipse作为Java业界成功的IDEproject,在3.0以前的版本它采用的是自己设计的一套插件体系结构,而Eclipse的插件体系结构在整个业界都是非常知名的,也是被认为非常成功的一种设计,但Eclipse在3.0版本时却做了一个重大决度,就是推翻它自己以前的插件体系结构,采用OSGI作为其插件体系结构。Eclipse之所以要抛弃自己那套已经比较成熟的插件体系结构而转而采用OSGI,就是因为OSGI的规范性以及OSGI对于插件体系结构更为完整的定义,Eclipse采用OSGI作为其插件体系结构的成功是很明显的,在Eclipse
3.1版本以后大家可以明显的感觉到启动速度的提升,同时也使得可以在运行时对插件进行管理,更明显的提升是插件的开发更加的规范,从而可以使用很多已有的OSGI插件。

BMW汽车的应用控制系统采用OSGI作为其底层架构,很多人都认为基于java的系统低效,不可能用于汽车这样的应用控制系统上。这套系统主要用来控制汽车上的音箱、灯光等等设备,总共由1000多个Bundle构成,但BMW汽车的应用控制系统启动时间却只需要3.5秒,这也从很大程度上反应了采用OSGI的系统的效率并不会低。

OSGI优点

第一点,    基于OSGI 的应用程序可动态更改运行状态和行为。在OSGI框架中,每一个Bundle
实际上都是可热插拔的,因此,对一个特定的Bundle 进行修改不会影响到容器中的所有应用,运行的大部分应用还是可以照常工作。当你将修改后的Bundle
再部署上去的时候,容器从来没有重新启过。这种可动态更改状态的特性在一些及时性很强的系统中尤其重要。

第二点,       它是一个稳定高效的系统。OSGI是一个微核的系统,所谓微核是指其核心只有为数不多的几个jar
包。基于OSGI框架的系统可分可合,其结构的优势性导致具体的Bundle 不至于影响到全局,不会因为局部的错误导致全局系统的崩溃。

第三点,       可复用性强。OSGI框架本身可复用性极强,很容易构建真正面向接口的程序架构,每一个Bundle
都是一个独立可复用的单元。

OSGI缺点


管理端不够强大目前OSGI框架提供的管理端不够强大,现在的管理端中仅提供了基本的Bundle状态管理、日志查看等功能,像动态修改系统级别的配置(config.ini)、动态修改Bundle的配置(Manifest.mf)、启动级别等功能都尚未提供,而这些在实际的项目或产品中都是非常有必要的。

采用OSGI作为规范的模块开发、部署方式自然给现有开发人员提出了新的要求,需要学习新的基于OSGI的开发方式

什么是Bundle

在OSGI框架中是采用Bundle的方式来组织和部署系统的

Bundle其实就是一个jar文件,这个jar文件和普通的jar文件唯一不同的地方就是Meta-inf目录下的MANIFEST.MF文件的内容,关于Bundle的所有信息都在MANIFEST.MF中进行描述,可以称它为bundle的元数据,这些信息中包含有象Bundle的名称、描述、开发商、classpath、需要导入的包以及输出的包等等

Bundle是个独立的概念,在OSGI框架中对于每个Bundle采用的是独立的classloader机制,这也就意味着不能采用传统的如引用其他Bundle的工程来实现Bundle间的协作了,那么在OSGI框架中Bundle之间是怎么协作的呢,在OSGI框架中对于每个Bundle可以定义输出的包以及引用的包,这样在Bundle间就可以共享包中的类了,尽管这样也可以直接实现简单的Bundle的协作,但在OSGI框架中更加推荐的是采用Service的方式,Service-Oriented的概念(例如SOA)大家都接触多了,OSGI框架也同样是如此的,每个Bundle可以通过BundleContext注册对外提供的服务,同时也可以通过BundleContext来获得需要引用的服务,采用Service-Oriented的方式可以使得对外提供的服务能够更加的封闭,不需要为了使用别的Bundle提供的Service而做环境依赖等的设置,同时,Bundle还可以采用Require-Bundle的方式来直接引用其他的Bundle(相当于引用其他Bundle的工程或jar)

主要的开源OSGI框架


Equinox


最知名,也是更新最频繁的,由于Eclipse 基金的支持,其功能越来越完善,实现了OSGi R4
规范,并提供很多平台性质的服务,包括:常用功能模块、日志模块、Web服务器模块、Servlet 模块、JSP解析模块等等。由于其与Eclipse
的天然联系,使得开发基于Equinox的应用程序变得很简单。Eclipse 3.1 之后的版本,Eclipse 本身就已经包含了Equinox。

遵循EPL (The Eclipse Public
License),任何扩展自Eclipse源码的代码也必须是开源的,商业软件可以使用,也可以修改代码,但要承担代码产生的侵权责任。

Knopflerfish

很早的,也很优秀的一个OSGI框架,也实现了OSGI R4 标准。该项目的宗旨在于创建一个易于开发的OSGI平台,与Equinox
不同之处在于它本身提供一些小应用实例,包括一个可视化控制台等,也提供基于Eclipse 的插件。

遵循Knopflerfish License (BSD-esque) http://www.knopflerfish.org/license.html

商业软件可以使用,也可以修改使用BSD协议的代码

Felix

很新的一个OSGi 框架,社区很活跃,更新频率高,是Apache 的开源项目。该项目2007年8月才出1.0 版,也实现了OSGiR4
规范,也提供相关的基础服务和扩展服务功能。

Felix也有了Eclipse集成支持,开发者可以在Eclipse IDE里运行Felix。

Felix组件按照Apache软件许可证2.0(Apache Software License Version 2.0)来发布许可。

Apache
Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。商业软件可以使用,也可以修改使用Apache协议的代码。

与流行框架的结合

Spring-DM 指的是Spring Dynamic Modules。Spring-DM 的主要目的是能够方便地将Spring 框架和OSGi
框架结合在一起,使得使用Spring 的应用程序可以方便简单地部署在OSGi 环境中,利用OSGi框架提供的服务, 将应用变得更加模块化。

附录

BSD开源协议(Felix遵守的许可证协议)

  BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

  1. 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。

  2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。

  3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

  BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

Apache Licence
2.0(knopflerfish
遵守的许可证协议)

  ApacheLicence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件:

  1. 需要给代码的用户一份Apache Licence

  2. 如果你修改了代码,需要再被修改的文件中说明。

  3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。

  4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache
Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

  ApacheLicence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

equinox遵守的是Eclipse public
licesen.
(没找着中文翻译)http://www.eclipse.org/legal/epl-v10.html(原文地址)

OSGI简介,布布扣,bubuko.com

时间: 2025-01-16 16:25:25

OSGI简介的相关文章

OSGI简介(转)

原文地址 目前,业内关于OSGI技术的学习资源或者技术文档还是很少的.我在某宝网搜索了一下"OSGI"的书籍,结果倒是有,但是种类少的可怜,而且几乎没有人购买.因为工作的原因我需要学习OSGI,所以我不得不想尽办法来主动学习OSGI.我将用文字记录学习OSGI的整个过程,通过整理书籍和视频教程,来让我更加了解这门技术,同时也让需要学习这门技术的同志们有一个清晰的学习路线. 我们需要解决一下几问题:1.如何正确的理解和认识OSGI技术? 我们从外文资料上或者从翻译过来的资料上看到OSGi

OSGI介绍

OSGI介绍 OSGI简介 OSGI (Open Service Gateway Initiative)联盟成立于1999 年,它是一个非盈利的国际组织,旨在建立一个开放的服务规范,为通过网络向设备提供服务建立开放的标准,是开放业务网关的发起者. OSGI联盟的初始目标是构建一个在广域网和局域网或设备上展开业务的基础平台,对OSGI 的最早设计也是针对嵌入式应用的,诸如机顶盒.服务网关.手机.汽车等都是其应用的主要环境. 由于OSGI的诸多优秀特性(可动态改变系统行为,热插拔的插件体系结构,高可

使用 Equinox 开发 OSGi 应用程序

本教程着重介绍 OSGi 框架知识.环境搭建.服务使用.应用设计.部署. 开始之前 关于本教程 OSGi 是目前动态模块系统的事实上的工业标准,虽然一开始只是作为嵌入式设备和家庭网关的框架来使用,但是实际上它适用于任何需要模块化.面向服务.面向组件的应用程序.而 Equinox 则是的 Eclipse 所使用的 OSGi 框架,是 Eclipse 强大的插件体系的基础,Eclipse 的稳定可靠性也为该框架带来了声誉. 本教程就将演示如何在 Eclipse 环境下利用 Equinox 框架进行

OpenDayLight(硼Boron版本)实战开发入门

   OpenDayLight(硼Boron版本)实战开发入门 OpenDayLight[1](简写为ODL)的硼Boron(0.5.0)版本于2016-09-16这几天刚刚发布.作为一款开源SDN网络控制器,依托于强大的社区支持以及丰富的功能特性,ODL成为了目前主流的SDN网络控制器开发平台.不仅为开发者提供了大量的网络管理功能,而且藉由AD-SAL(API驱动的服务层)和MD-SAL(模型驱动的服务层),给独立的网络应用提供了完善的二次开发接口.由于OpenDaylight架构的复杂性

OSGi原理与最佳实践:第一章 OSGi框架简介(2)

OSGi原理与最佳实践:第一章 OSGi框架简介(2) 由  ValRay 发布 已被浏览4884次 共有3条评论 已被3个人收藏 2013-08-16 21:23 顶(0) 踩(0) osgi原理与最佳实践 1.1.4 开发传统类型的应用 1.1.4.1 B/S 我们首先来看一下,如何基于 OSGi 来开发 B/S 结构的应用.B/S 结构应用程序的开发,可有两个选择:一个是在 OSGi 的框架中嵌入 Http 服务器,另外一个是在 Servlet 容器中嵌入 OSGi 框架.下面分别介绍这两

OSGi原理与最佳实践:第一章 OSGi框架简介(5)Spring-DM

OSGi原理与最佳实践:第一章 OSGi框架简介(5)Spring-DM 由  ValRay 发布 已被浏览8409次 共有3条评论 已被2个人收藏 2013-08-16 21:29 顶(1) 踩(0) osgi原理与最佳实践 1.3 Spring-DM 1.3.1 简介 Spring-DM 指的是 Spring Dynamic Modules.Spring-DM 的主要目的是能够方便地将 Spring 框架 和OSGi框架结合在一起,使得使用Spring的应用程序可以方便简单地部署在OSGi环

OSGI中blueprint简介

OSGI中blueprint简介 上篇博文我们开始了felix中的一个example编写,原本计划是讲felix中的几个example全部编写一遍,但是随后发现felix的这几个example都差不多,只是略微有些区别,编写来编写去始终都是这几行代码,讲起来也没什么意思,想着还是开始osgi中新的东西的讲解,思考来去,还是从blueprint开始. blueprint简介 在osgi中服务的使用有多种方式,如使用传统的注册式服务,就是我们之前中example不断使用的使用方式,还是osgi中的声

osgi与流行的框架(spring,struts,hibernate等)的集成

1.与流行的 JAVA B/S体系架构的集成 了解了基于osgi系统设计的基本思想,进一步来研究osgi与流行的框架(spring,struts,hibernate等)的集成,这里首先讲解一下集成原理. l        解决和spring的集成 由于spring的应用占据了大部分的java应用领域,所以解决与spring的集成是osgi必须解决的,spring-dm的推出大大促进了两者的结合,有助于osgi进军企业领域. Spring所带来得好处主要有这么两点: 1.       不需要对外的

OSGI

OSGi 规范简介 OSGi 联盟建立于 1999 年,是一个非赢利机构,旨在建立一个开放的服务规范.OSGi 规范为网络服务定义了一个标准的.面向组件的计算环境,它最初的目的就是为各种嵌入式设备提供通用的软件运行平台,屏蔽设备操作系统与硬件区别的中间件平台,通过这个平台,可以对不同软件商提供的应用(OSGi 中称为 Bundle)进行组件的生命周期管理的能力,如应用组件可以从运行中被安装.升级或者移除而不需要中断设备的操作,应用组件可以动态的发现和使用其他库或者应用程序.由于 OSGi 技术具