OSGI框架三个重要概念
OSGi框架是根据OSGi规范中定义的三个概念层设计的:模块、模块生命周期、服务。

模块层定义了OSGi模块的概念(bundle,即包含一个元数据MANIFEST.MF的JAR文件)。
bundle比标准JAR文件更强大,它可以声明哪些包对外可见(Export-Package);所以说它扩展了Java的访问修饰符。
bundle还可以明确声明依赖哪些外部包(Import-Package),这样就可以自动地管理和验证依赖包的一致性(这个过程称为bundle解析),确保了bundle版本和其他方面约束的一致性。
基于已有的JAR文件构建OSGi bundle是一个非侵入式的过程,只需要添加MANIFEST.MF。

生命周期层定义了在OSGi框架中是如何动态安装和管理模块的。在应用程序外部,生命周期层精确地定义了bundle生命周期的操作(安装、更新、启动、停止、卸载),使得你可以用一种明确的方式动态地提供、管理、改进你的应用程序,意味着可以安全滴在框架中安装和卸载bundle,而不用重启应用程序。在应用程序内部,生命周期层定义了bundle如何访问它的执行环境。

服务层支持和促成了一个灵活的应用编程模型。涉及面向服务的发布、查找和绑定的交互模式:服务提供者将服务发布到服务注册中心,服务客户端搜索服务注册中心,查找可供使用的服务。

开源OSGI框架

目前基于OSGi的框架大概有4个:KnopflerfishApache FelixEquinoxSpring DM。因为都是基于OSGi标准的,他们的大致用法和核心功能是一致的。一般来说一个OSGi的组件(Bundle)可以轻易的从一个框架迁移到另一个框架。框架的不同主要是体现在他们本身的设计和额外的服务上。根据我的一些经验,对这4个框架进行了一下比较,希望对刚接触OSGi或是由于如何选择OSGi框架的人有所帮助。

 Apache Felix 最全面的框架

Apache Felix是Apache旗下的一个OSGi框架,项目本身非常成熟,已经被用到了很多其他的项目中,例如Apache Servicemix。它本身提供的服务也是最全的,几乎涵盖了全部的OSGi 4.2的标准。除此之外还提供了一些非标准的功能,例如iPOJO。框架本身非常紧凑,你只需要3个包加一个shell就可以运行了,无论是开发还是Debug都非常简便。除了Felix,还有两个项目是和OSGi相关的。一个是Apache Felix Karaf,它本身是Felix的一个子项目,但他其实是封装了Felix提供更高一层的Runtime,例如提供了JAAS。另一个是Apache Aries,目前还处于起步阶段,它作为Felix的补充,提供OSGi企业级规范,包括JPA、JDBC、JTA、JNDI等等。

总的来说,Apache Felix是我个人推荐的最佳OSGi框架,它简单的结构也更适合出学OSGi的开发人员。

     Equinox 与Eclipse完美结合

Equinox是Eclipse旗下的OSGi框架,本身也被Eclipse采用,是Eclipse注明的PDE开发环境的底层。Equinox本身也是相当的全面的框架,提供的功能不比Felix少多少。但是它功能的分类就稍显混乱,文档和Sample也组织的不是很好。事实上相当Equinox还是被当做开发Eclipse Plugin的应用较多,如果你要开发一个Web程序,你就会感到它本身的功能和文档不够全面。Equinox最大的优势在于它和Eclipse结合紧密,只要你安装了PDE,你就已经有了Equinox,可以方便的在Eclipse里设置你开发的Bundle,启动、部署等操作也异常简单,而且有专门的Debug界面,你还能要求什么呢?

如果你想基于Eclipse开发,Equinox无疑是好选择。但对于新手而言,有时候会搞混Eclipse Plugin与OSGi的关系。

Spring DM 畸形的需求产物

Spring DM是Spring旗下的OSGi框架,Spring我想大家都知道了,Spring DM的最大特点就是结合了Spring框架。我之所以说特点还不是优势,是因为我认为这个需求本身就是错误的。Spring和核心就是一个IoC,当然后来它的外延扩大了,提供了越来越多乱七八糟的功能。OSGi规范本身就制定了一系列IoC的功能标准,尤其是其中的BluePrint其实相当多的借鉴了Spring,因此完全没有必要再引入Spring充当新的IoC了。Spring本身无论是ClassLoader还是配置文件上都与OSGi格格不入,之所以有这种需求是因为现在有大量基于Spring的项目想要过渡到OSGi上。Spring还发布了一个App Server叫Spring DM Server,是一个基于Spring DM的App Server,你会发现你需要加载80+的包来完成一个hello world操作,这种恐怖的依赖性正是Spring所带来的。

意识到这个问题的显然不只是我一个人,传闻Spring DM和Spring DM Server都将会移交给Eclipse。就目前来说除非你有基于Spring项目的移植需求,我不推荐其他任何情况下使用Spring DM。

Knopflerfish 孤独孤傲

Knopflerfish其实是OSGi的先行者,但是由于没有强力的靠山,再后来的竞争中显然不如前三者有人气。它本身是一个相当标准OSGi框架,提供了绝大多数标准功能,但是无论在人气上,开发进度上,文档完善上都不如其他的三者。

OSGI框架学习的更多相关文章

  1. OSGI框架—HelloWorld小实例

    OSGi(Open Service Gateway Initiative)技术是Java动态化模块化系统的一系列规范.OSGi一方面指维护OSGi规范的OSGI官方联盟,另一方面指的是该组织维护的基于 ...

  2. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

  3. Hadoop学习笔记—18.Sqoop框架学习

    一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...

  4. Spring框架学习一

    Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...

  5. EF框架学习手记

    转载: [ASP.NET MVC]: - EF框架学习手记 1.EF(Entity Framework)实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架 ...

  6. web框架学习列表

    转载自鲁塔弗的博客,原文网址:http://lutaf.com/148.htm web framework层出不穷,特别是ruby/python,各有10+个,php/java也是一大堆 根据我自己的 ...

  7. 2013 最新的 play web framework 版本 1.2.3 框架学习文档整理

    Play framework框架学习文档 Play framework框架学习文档 1 一.什么是Playframework 3 二.playframework框架的优点 4 三.Play Frame ...

  8. SSH 框架学习之初识Java中的Action、Dao、Service、Model-收藏

    SSH 框架学习之初识Java中的Action.Dao.Service.Model-----------------------------学到就要查,自己动手动脑!!!   基础知识目前不够,有感性 ...

  9. 各种demo——CI框架学习

    各种demo——CI框架学习   寒假学习一下CI框架,请各位多多指教! 一.CI的HelloWorld! 注意:CI禁止直接通过文件目录来访问控制器. ./application/controlle ...

随机推荐

  1. KASS分布式文件系统(Kass File System)

    KASS分布式文件系统(Kass File System),简称KFS,是开始公司自主研发的分布式文件存储服务平台.KFS系统架构及功能服务类似Hadoop/GFS/DFS,它通过HTTP-WEB为上 ...

  2. C# MessageBox 用法大全(转)

    C# MessageBox 用法大全 http://www.cnblogs.com/Tammie/archive/2011/08/05/2128623.html 我们在程序中经常会用到MessageB ...

  3. kindeditor.net应用

    1.网址:http://kindeditor.net/docs/usage.html

  4. 李洪强漫谈iOS开发[C语言-040]-switch case

    李洪强漫谈iOS开发[C语言-039]-switch case 补充:

  5. 用DateTime.ToString(string format)输出不同格式的日期

    http://www.cnblogs.com/xvqm00/archive/2009/02/19/1394093.html DateTime.ToString()函数有四个重载.一般用得多的就是不带参 ...

  6. SQL Server数据导入导出的几种方法

    在涉及到SQL Server编程或是管理时一定会用到数据的导入与导出, 导入导出的方法有多种,结合我在做项目时的经历做一下汇总: 1. SQL Server导入导出向导,这种方式是最方便的. 导入向导 ...

  7. esriFeatureType与esriGeometryType的区别与联系

    esriFeatureType通常用来表示数据的存储结构,即物理层: esriGeometryType通常用来表示数据的几何形状,即表现层. esriGeometryType枚举类型详解 常量 值 对 ...

  8. iOS iOS7越狱

    1.使用盘古越狱工具 (或者PP助手) 2.越狱成功后需要安装Apple File Conduit “2”,用于替代afc2add插件 3.安装AppSync插件 (绕过系统验证,随意安装.运行破解的 ...

  9. 关于Linux的时间与时区

    转:http://linux.chinaunix.net/techdoc/beginner/2007/06/22/960790.shtml 首先要说明的是我的系统是fedora,其他系统可能不完全相同 ...

  10. 基于nginx的tomcat负载均衡和集群

    要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务器即可共享SESSION了. 你可以自己写tomcat的扩展来保存SESSI ...