什么是OSGi

转载 2012年03月21日 17:15:29

OSGi的历史背景 

什么是OSGi ?

OSGi ( Open Service Gateway Initiative)  字面上的意思是一个公共的服务平台

1999年OSGi联盟成立,它是一个非盈利的国际组织,旨在建立一个开放的服务规范,为通过网络向设备提供服务建立开放的标准,是开放业务网关的发起者。OSGi 联盟的初始目标是构建一个在广域网和局域网或设备上展开业务的基础平台。历史总是具有惊人的相似性,正如Java 诞生于一个嵌入式开发的项目中,却被应用于网络平台的开发,对OSGi 的最早设计也是针对嵌入式应用的,诸如机顶盒、服务网关、手机、汽车等都是其应用的主要环境。后来,由于OSGi 的诸多优秀特性(可动态改变系统行为,热插拔的插件体系结构,高可复用性,高效性等等),它被应用于许多PC 上的应用开发,因此逐步为开发者所知和钟爱。现在人们对OSGi 的理解已经远远不是它字面和初衷所能解释的了,笔者认为称其为一个轻巧的、松耦合的、面向服务的应用程序开发框架更为确切一些。

OSGi 真正被大家所知还是和Eclipse 有密切关系的。Eclipse 很多年都是Java 开发者的首选IDE,相信只要是一个Java 开发者,应该没有人不知道Eclipse 的。在Eclipse 3.0 以前的版本中,它本身有一套自身的插件体系,而该插件体系的设计非常精巧细致,受到许多开发者的推崇,但是Eclipse 基金在Eclipse 3.0 发布的时候,做出了一个大胆的行为,就是将Eclipse 逐步迁移到OSGi 框架中,并自己实现了一个OSGi 开源框架,取名为Equinox,该框架随着每次Eclipse 的发布也会相应的更新。Eclipse 之所以这么做,其一是因为Eclipse 的插件体系与OSGi 的设计思想不谋而合,其二也是因为OSGi 更为规范,其对插件体系的定义也更为完整一些。事实证明Eclipse 在采用OSGi 架构后,无论从性能、可扩展性这两个方面来讲还是从二次开发的角度来定义,都取得巨大的成功。下图展示了Eclipse 与OSGi 框架的关系。


OSGi的特点

   在介绍OSGi框架的特点之前,先简单的介绍一下OSGi框架的各个部分,如下图所示:


每一个在OSGi框架中运行的逻辑单元成为一个Bundle。
  1)Bundle实际是一个符合特定形式的jar文件;
  2)Bundle的功能:可以是抽象,也可以是具体的
     抽象:它不是一个具体的应用,没有完成一些业务功能,而只是暴露了一些接口或者功能供给其他的Bundle使用;
     具体:Bundle可以独立的完成一个功能;
  3)Bundle的状态:installed(安装完成,本地资源成功加载)
                            resolved(依赖关系满足,即该Bundle要么是准备好运行了,要么是已经被停止了)
                            starting(Bundle正在被启动)
                            stopping(Bundle正在被停止)
                            active(Bundle 被激活,正在运行中)
                            uninstalled(Bundle 被卸载了)

OSGi究竟能够给企业应用带来什么?
它究竟有哪些功能值得我们把宝贵的时间投资在上面?
1.基于OSGi的应用程序可动态更改运行状态和行为
2.它是一个稳定高效的系统。OSGi是一个微核的系统,所谓微核是指其核心只有为数不多的几个jar包。基于OSGi框架的系统可分可合,其结构的优势性导致具体的Bundle不至于影响到全局,不会因为局部的错误导致全局系统的崩溃。每个Bundle也只有当服务被调用的时候才会启动,因此性能是较一般的框架高出许多。
3.可复用性强。OSGi框架本身可复用性极强,很容易构建真正面向接口的程序架构,每一个Bundle都是一个独立可复用的单元。但是采用OSGi框架进行企业开发是需要气魄和勇气的,因为当前的软件企业,大多已经积累了许多年,都会遗留下来一些可复用的工具箱程序,而采用OSGi架构需要重新对这些遗留系统进行封装,更有可能的是需要把整个体系架构打散了,进行重新的架构和排列。这个开发成本不能说是不高,但笔者认为是值得的,因为从此以后企业可以利用OSGi独特的特性,将重复的知识轻易的过滤掉。对于新的开发,可以从企业的Bundles库中精简出可复用的模块,量身定做新的Bundles,最大限度的利用了以前的积累,这样的过程更能促使企业竞争力的增强。

OSGi框架介绍

当前的OSGi 开源框架主要包含如下几个:

Equinox

最知名,也是更新最频繁的,由于Eclipse 基金的支持,其功能越来越完善。实现了OSGi R4 规范,并提供很多平台性质的服务,包括:常用功能模块、日志模块、Web服务器模块、Servlet 模块、JSP 解析模块等等。由于其与Eclipse 的天然联系,使得开发基于Equinox 的应用程序变得很简单,推荐采用此框架进行二次开发。

Knopflerfish

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

Felix

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



相关文章推荐

(续)浅析OSGI的bundle依赖

From: (续)浅析OSGI的bundle依赖 上一篇文章,我们谈到了基础的bundle依赖关系,以及当依赖的bundle出现问题的时候的情况。 这里看一个更常见的情况,当依赖的多个插件同时...

OSGI环境搭建-使用JETTY-9.X创建WEB应用-Jetty性能调优

由于项目有组件式开发的需求,网上找了一阵,发现有OSGI和SpringDM都能支持,我选了equinox的实现(新版本注册Servlet已经抛弃HttpService) 网上学习的过程中,发现资...
  • aglne
  • aglne
  • 2016年09月18日 16:17
  • 662

三步学会用spring开发OSGI——(第一步:环境篇)

Spring-DM 指的是Spring Dynamic Modules. dm Server 是一个完全模块化部署的,基于OSGi的Java服务器,为运行企业Java应用和Spring应用提供更...

Vert.x 核心模块(十六) 流 线程安全 SPI OSGi

流(Stream) 在Vert.x中有一些对象允许读取或写入数据。在以前的版本中,stream.adoc包是唯一操作Buffer的包。从现在开始,流将不与任何Buffer藕合并且可与其他类别的对象协同...

OSGI:构建Spring DM开发环境

spring dm又称spring动态模型,是spring对于osgi的实现,它仍然以Equinox为集成,但提供了大量与sping pojo相关的bundle,极大的方便了与现有基于spring开发...
  • luoww1
  • luoww1
  • 2013年06月26日 15:06
  • 1312

用SpringSource Tool Suite 开发OSGI——(第一步:环境篇)

Spring-DM是什么   Spring-DM 指的是Spring Dynamic Modules.   dm Server 是一个完全模块化部署的,基于OSGi的Java服务器,为运行企业...

OSGI入门实例讲解(一)

开放服务网关倡议(OSGi)定义了开发和部署模块应用程序和库的体系结构。作为介绍OSGi的第一篇文章,本文旨在让你了解OSGi开发的一些概念,并向你展示了如何使用Eclipse的OSGi容器(Equi...
  • canlets
  • canlets
  • 2014年05月28日 21:00
  • 4789

Eclipse插件开发之基础篇(4) OSGi框架

1. 什么是OSGi框架   OSGi(Open Service Gateway Initiative)框架是运行在JavaVM环境里的服务平台。框架提供的主要功能是对应用和组件的生命周期管理,系统...

# OSGI中使用自定义的command

OSGI中command的应用前文在上一篇博文中,我们讲解了osgi中的blueprint,但并没有对此作出具体的运用,在本文及以后将会在讲osgi中其他应用的时候将blueprint串进来讲解,本文...

OSGI中Command -控制台命令

在OSGI的中开发bundle,在Karaf容器中加载bundle后,往往需要获取bundle处理的中间信息,用于调试、故障定位等。而org.apache.karaf.shell.console提供一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:什么是OSGi
举报原因:
原因补充:

(最多只允许输入30个字)