OSGI介绍

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

时间: 2024-10-10 06:35:59

OSGI介绍的相关文章

[OSGI]OSGI入门介绍

1. OSGI的介绍: OSGI是open service gateway initiative 的缩写, 面向java的动态模型系统.osgi服务平台向java提供服务,这些服务使java成为软件集成和软件开发的首选环境,在百科上面有更加详细的介绍: http://baike.baidu.com/link?url=jZjzRuQzq7R_3i5Itkykb80ecbAC_YGFX-ZPSRCu43zMsa13BmzGC86fyDVxqe3csOEplPhUb2aIcVX-cGNoNPKKpQE

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框架简介(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的Virgo环境搭建(一)——环境篇

1.背景 最近要将web项目模块化以支持热插拔.动态扩展等功能,因此我们开始研究如何将OSGi引入web项目.关于OSGi,大家可以参考OSGi研究 与总结.现在主流的j2EE框架都离不开Spring,因此,将OSGi与Spring进行无缝整合就成为了引入OSGi的关键.值得庆幸的 是,Spring早在08年就已对OSGi进行大力支持,并开发了子项目SpringDM与OSGi进行完美融合.但是,自从3.2版本之后,为了 Gradle,Spring摒弃OSGi(关于为什么摒弃OSGi,大家可以参考

OSGI

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

MyEclipse相关用法介绍

MyEclipse相关用法介绍 ================================================================================ 编辑: Ctrl+Shift+L      显示所有快捷键 Ctrl+K        参照选中的词(Word)快速定位到下一个 Ctrl+Shift+K      参照选中的词(Word)快速定位到上一个 Ctrl+O         快速显示OutLine Ctrl+T        快速显示当前类的

java 加载dll介绍(转)

最近在做的工作要用到本地方法,需要在Java中加载不少动态链接库(以下为方便延用Windows平台下的简写dll,但并不局限于Windows).刚刚把程序跑通,赶紧把一些心得写出来,mark.也希望对大家的类似工作有所帮助 首先,应当明确,dll有两类:(1)Java所依赖的dll和,(2)dll所依赖的dll.正是由于第(2)种dll的存在,才导致了java中加载dll的复杂性大大增加,许多说法都是这样的,但我实验的结果却表明似乎没有那么复杂,后面会予以详细阐述. 其次,Java中加载dll的

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

基本简介编辑 OSGI服务平台提供在多种网络设备上无需重启的动态改变构造的功能.为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方.OSGi联 OSGI 盟已经开发了为例如象HTTP服务器.配置.日志.安全.用户管理.XML等很多公共功能标准组件接口.这些组件的兼容性插件实现可以从进行了不同优化和使用代价的不同计算机服务提供商得到.然而,服务接口能够基于专有权基础上开发. 因为OSGi技术为集成提供了预建立和预测试的组件子系统,所以OSGi技