`
snoopy7713
  • 浏览: 1147092 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    osgi介绍osgi介绍

    OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它为开发人员提供了一种动态、模块化的运行时环境。在OSGi中,应用程序被分解为称为“bundle”的独立单元,这些bundle可以相互依赖并独立地加载、...

    经典OSGI学习资料

    在这个压缩包中,我们可以找到一个名为"OSGI介绍"的文件,它可能包含了OSGI的基本概念、核心特性以及如何开始学习OSGI的相关知识。 首先,OSGI的核心概念是模块系统。在OSGI框架中,每个模块被称为服务单元或bundle...

    介绍OSGI的PPT

    NULL 博文链接:https://chinasxhz.iteye.com/blog/256689

    Introduce.OSGi.ppt

    【OSGi介绍.ppt】 OSGi,全称为Open Services Gateway Initiative,中文译为开放服务网关倡议,是一种针对Java平台的动态模块系统。OSGi旨在解决软件开发中的复杂性问题,提供了一种模块化、可扩展且动态化的系统...

    OSGi 分布式通讯组件 R-OSGi

    ### R-OSGi介绍 R-OSGi是OSGi在分布式环境中的扩展,它将OSGi服务的概念应用于网络环境,允许服务跨越不同网络节点进行通信。R-OSGi的核心特性包括: 1. **透明性**:R-OSGi提供了透明的远程服务调用,意味着...

    OSGi理论与实战

    ### OSGi介绍 在OSGi框架中,模块被定义为最小的部署单元,即“Bundle”。Bundle本质上是一个包含特殊元数据(如`Bundle-Name`等)的JAR文件,这使得它能够与其他Bundle在同一个Java虚拟机中运行时保持隔离,同时...

    很久之前的osgi整理

    通过阅读《Introduce.ppt》这个文件,我们可能会获得更深入的OSGi介绍,包括它的核心概念、优势、使用示例,以及如何在实践中应用这些概念。遗憾的是,由于没有实际文件内容,我们无法提供具体的细节。但通过上述...

    osgi框架开发介绍

    提供的"osgi框架介绍"可能包含基础的PDF教程,它们通常会涵盖以下几个方面: - OSGi的基本概念和架构 - Bundle的创建和配置 - 依赖管理和版本控制 - 服务注册、发现及事件处理 - 示例项目和实战演练 通过深入学习...

    OSGI类资源动态加载介绍

    OSGi(Open Service Gateway Initiative)是一个面向Java的动态模型系统,旨在为长时间运行的系统提供动态更新能力,并且在更新过程中对运行环境影响最小化。OSGi框架的核心优势在于实现类资源的动态加载、更新和...

    osgi,林昊写的osgi实战和进阶

    7. **调试与监控**:介绍如何在OSGI环境中进行调试和性能监控,以优化应用程序。 在《OSGI进阶》中,林昊可能进一步探讨以下高级主题: 1. **复杂系统的集成**:如何将OSGI与其他技术,如Spring、EJB或RESTful服务...

    OSGI原理与最佳实践

    资源名称:OSGI原理与最佳实践内容简介:国内第一本OSGi图书OSGi国内推广者林昊多年经验的结晶涵盖OSGi从入门到深入的知识体系引领OSGi国内研究和普及本书基于作者多年使用OSGi的经验而...,介绍OSGi的作用及基本概念...

    Enterprise OSGI in action

    本书详细介绍了模块化编程的重要性,以及OSGi如何强化Java的模块化能力。同时,本书也解答了为何传统上的企业级Java应用和OSGi结合得并不理想,以及企业OSGi如何解决这一问题,从而提出了一种新的编程模型。 书中...

    OSGI规范中文版

    OSGi规范中文版是一本全面介绍OSGi技术的书籍,它不仅涵盖了OSGi技术的基础知识,还详细介绍了OSGi的内部结构和工作原理,对于想要深入学习和应用OSGi技术的开发者而言,是一本非常有价值的参考书。 ### OSGi规范的...

    OSGi原理与最佳实践(完整版)&OSGi_in_action

    1. **OSGi基础**:介绍OSGi的核心概念,如模块系统(称为"bundle"),服务注册和发现机制,以及如何将Java应用程序划分为独立的模块。 2. **模块化开发**:讲解如何使用OSGi模块化你的代码,减少依赖冲突,提高代码...

    OSGI技术介绍

    OSGI技术介绍,自己公司的培训文档,非常全面的描述了OSGI

    osgi重要文档--osgi核心规范文档,osgi服务文档,osgi-最佳原理与实践(王昊编著,共79页)

    下面将详细介绍这些文档所涵盖的关键知识点。 首先,"OSGi R4核心规范文档"是理解OSGI机制的基础,R4代表了OSGI的第四代版本。该规范定义了OSGI框架的基础架构,包括模块系统、生命周期管理、服务注册与发现等核心...

    利用R-OSGi实现分布式OSGi应用

    本文通过介绍传统 OSGi 应用程序及 R-OSGi 的实现方式入手,阐述了 R-OSGi 对于 OSGi 规范的实现方式。然后通过一个简单的功能实现由浅入深地讲述传统 OSGi 和 R-OSGi 上的两种不同实现,让您对实际操作加深印象。...

    osgi资料

    - Spring与OSGi的整合:介绍如何在OSGi环境中使用Spring,如使用Declarative Services或Blueprint API。 - 微服务架构:讨论如何利用OSGi的模块化特性构建微服务,实现松耦合和独立部署。 - AOP在OSGi中的应用:...

    OSGi原理与最佳实践

    本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入的知识体系,从OSGi的简介开题,介绍OSGi的作用及基本概念;其后进入OSGi实战,结合实例讲解如何基于OSGi框架编写模块化、动态化的各种Java应用;最后...

    OSGI + Webservice 例子

    下面将详细介绍这个例子中可能涉及的知识点: 1. **OSGI模块创建**:首先,你需要了解如何创建一个OSGI模块,这通常涉及到编写MANIFEST.MF文件,声明模块的依赖和导出的包。例如,OSGI.Api可能是提供公共接口的模块...

Global site tag (gtag.js) - Google Analytics