OSGi正在成为一种趋势,越来越多的项目采用了OSGi,越来越多的中间件都开始采取了OSGi的标准。

什么是OSGi

OSGi的名称来源于其开源组织的名称Open Services Gateway initiative,OSGi是一个标准,它致力于提供给Java项目一个模块化的底层环境,以及一系列通用的服务(Service)。和普通的JVM程序相比,OSGi的程序天生拥有动态模块的特点,不同的模块(OSGi里称之为Bundle)有着独立的生命周期,可以独立进行安装、启动、停止、卸载的操作,模块间的依赖性管理也由OSGi提供。你可以看出,OSGi非常适合需要进行Plugin管理的项目,一个典型的成功案例就是Eclipse和它众多的Plugin。OSGi标准还规范了一系列我们常间的操作,日志、配置文件、事件队列、Web开发、JPA&JDBC等等,大部分部署OSGi标准的框架都提供了这些服务,这样一方面规范了我们代码的结构,一方面节约了我们开发的时间。

目前基于OSGi的框架大概有4个:Knopflerfish, Apache Felix, Equinox, Spring 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框架,提供了绝大多数标准功能,但是无论在人气上,开发进度上,文档完善上都不如其他的三者。

4种常见的osgi框架比较相关推荐

  1. 【测试开发】几种常见的自动化测试框架

    几种常见的自动化测试框架 在软件测试领域,自动化测试框架有很多,这里主要介绍几种常用的自动化测试框架. 1.pytest pytest 是 Python 的一种单元测试框架,与 Python 自带的 ...

  2. 五种常见的自动化测试框架

    一.什么是测试自动化框架 自动化测试框架就是用于测试自动化的框架.具体来说,它提供了自动化测试用例编写.自动化测试用例执行.自动化测试报告生成等基础功能.我们只需要基于这个框架,完成和业务高度相关的测 ...

  3. 几种常见的ORM框架

    [1]Mybatis 官网地址:https://github.com/mybatis/mybatis-3 ① 概要 MyBatis 是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架.MyBa ...

  4. 四种常见NLP框架使用总结

    作者:哈工大SCIR 狄东林 刘元兴 朱庆福 胡景雯 引言 随着人工智能的发展,越来越多深度学习框架如雨后春笋般涌现,例如PyTorch.TensorFlow.Keras.MXNet.Theano和P ...

  5. Executor框架、ThreadPoolExecutor、3种常见的线程池

    参考:https://blog.csdn.net/javazejian/article/details/50890554 1. Executor框架 为什么需要线程池? 在java中,使用线程来执行异 ...

  6. 5种比较常见的自动化测试框架

    每一个测试人员都应该了解每种框架的优缺点,以帮助你的团队更好地确定最适合的测试的框架,以达到事半功倍. 什么是测试自动化框架? 自动化测试框架就是用于测试自动化的框架.具体来说,它提供了自动化测试用例 ...

  7. Java中 9 种常见的 CMS GC 问题分析与解决

    目录 Java中 9 种常见的 CMS GC 问题分析与解决 1. GC 1.1 引言 1.2 概览 2. GC 基础 2.1 基础概念 2.2 JVM 内存划分 2.3 分配对象 2.4 收集对象 ...

  8. 美团技术总结:Java中9种常见的CMS GC问题分析与解决

    1. 写在前面 | 本文主要针对 Hotspot VM 中"CMS + ParNew"组合的一些使用场景进行总结.重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省 ...

  9. 美团技术:Java中9种常见的CMS GC问题分析与解决

    目前,互联网上 Java 的 GC 资料要么是主要讲解理论,要么就是针对单一场景的 GC 问题进行了剖析,对整个体系总结的资料少之又少.前车之鉴,后事之师,美团的几位工程师历时一年多的时间,搜集了内部 ...

最新文章

  1. 两款接口测试工具推荐
  2. 只此一招,全屏操作从此易如反掌
  3. int整数型转换char*字符串
  4. react组件之间重用状态
  5. 上半年产品原型设计Axure rp稿(持续更新)
  6. python里pip是什么意思_python使用pip的方法是什么
  7. Java数组在内存中的分配
  8. android获取sd的大小,Android实现获取SD卡总容量,可用大小,机身内存总容量及可用大小的方法...
  9. 华为牛人在华为工作十年的感悟!--总结[华为的10年工作]
  10. css固定姓名显示长度,排列更整齐
  11. lpx寒假作业案例15
  12. [每日短篇] 5 - Sublime Text 的正则表达式 Capturing Group
  13. java系统爬塔游戏,如何玩爬塔游戏?一目了然,每天只需2分钟
  14. JavaWeb中点赞功能的实现及完整实例
  15. vue2中vuex状态管理的理解(菜单面包板)
  16. java.util.zip 类 ZipEntry
  17. Scratch课程:如何让角色实现渐变的效果?
  18. 20140322 卡迪夫城VS利物浦,拔出重剑,有惊无险
  19. 输出斐波那契数列前n项以及前n项和
  20. 什么是路由模式通配符?

热门文章

  1. hadoop如何使用linux命令,hadoop命令_Linux使用hadoop dfs命令的方法
  2. 初一下册计算机教案,七年级信息技术下册教案
  3. 消费互联网时代建立了一种互联网经济与实体经济对立的二元经济结构
  4. 魔兽世界服务器维护12月13日,3月27日服务器维护提前完成 更新12M工具补丁
  5. 小程序坑爹玩意儿的 U.createEvent is not a function报错问题汇总
  6. idea中重新加载新的依赖方法
  7. android5自动刷,nexus5怎么刷Android5.0 nexus5刷Android5.0教程
  8. 【老罗笔记】一万小时天才理论
  9. 达梦数据库 图形化界面安装详细教程
  10. MPU6050原始数据计算加速度、角速度、倾斜角度