OSGi正在成为一种趋势,越来越多的项目采用了OSGi,越来越多的中间件都开始采取了OSGi的标准。身为一名Java开发人员,如果你还对OSGi结构一无所知,那你真的有点Out了。

什么是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框架,提供了绝大多数标准功能,但是无论在人气上,开发进度上,文档完善上都不如其他的三者。

标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,尊重他人劳动成果

文章转载自:网络转载

1

好文不易,鼓励一下吧!

java 类似osgi_4大Java OSGi 框架比较相关推荐

  1. delphi java 类似_【Java二十周年】Delphi转行java的一些小感触

    本文纯属1届小码农对java使用进程的体验感触 目录: 初遇java编程语言 与java的擦肩 深入java跨平台性 开源支持 web的支持 初遇java编程语言 刚上大学的时候,完全是个电脑盲.刚入 ...

  2. java 类似datatable_在java中实现类似于.net中的DataTable,请各位看看,这种方法可行吗?...

    由于项目 说句实话,我做起来非常之不爽快,各种不爽快,随便什么地方都想和.net靠近, 所以晚上就写了这个模拟DataTable的简单功能,初步测试是通过了,由于太晚了也不能优化. 现在贴出代码请各位 ...

  3. java外包恒大,JAVA开发工程师

    职位描述: 工作内容: 1.负责完成程序开发.修改.代码质量.测试和部署工作: 2.负责明确和梳理开发需求.设计和评审技术方案,编写和审核各类技术文档: 3.负责管理和协助供应商开发人员有效的开展工作 ...

  4. java类似goto_原来java中也有类似goto语句的标签啊--java label标签

    goto语句的危害: goto语句是在源码级上的跳转,这使其招致了不好的声誉.若一个程序总是从一个地方跳到另一个地方,还有什么办法来控制程序的流程. java中的"goto": 虽 ...

  5. 从底层重学 Java 之两大浮点类型 GitChat链接

    chat连接 https://gitbook.cn/gitchat/activity/5f03fdd3852a4f3686fb3366 简介 从底层,从原理,我们来重学一次 Java.两大 Java ...

  6. 从底层重学 Java 之两大浮点类型 GitChat连接

    从底层,从原理,我们来重学一次 Java.两大 Java 浮点类 Double.Float 是我们比较常用的对象,他们的源码及实现是怎样的呢? 本系列秉承所有结论尽量从源码中来,没有源码的尽量标明出处 ...

  7. OSGi 规范和框架 OSGi框架类加载机制 Java默认类加载器机制和OSGI类加载器机制比较

    一.OSGi 规范 OSGi(Open Service Gateway Initiative) 技术是 Java 动态化模块化系统的一系列规范.OSGi 一方面指维护 OSGi 规范的 OSGi Al ...

  8. 最适合Java开发者的大数据工具和框架

    http://www.xsh-gz.com/javatrain/20170104/2222.html 转自 最适合Java开发者的大数据工具和框架 发布时间: 2017-01-04 17:12:58 ...

  9. Java的3大框架都学习什么呢?

    Java是互联网行业的第一编程语言,相信大家都已经有了解了,事实也确实如此,Java还是世界第一编程语言,在学习Java的过程中,框架是程序员们必学的知识点,而且是十分重要的应用,Spring.Str ...

最新文章

  1. web服务器错误配置文件,web服务器http配置文件
  2. LeetCode 236. 二叉树的最近公共祖先
  3. nodejs入门教程之http的get和request简介及应用
  4. python绘图实例-Python——matplotlib基础绘图函数示例
  5. Pair Programming 1 (Casual Game) 曹竹 杨牧 贪吃蛇游戏扩展 Blog Report
  6. mod_pagespeed
  7. python用缩进来标明代码的层次关系_8-1-Python设计案例.pptx
  8. js中立即执行函数会预编译吗_面试官:聊聊对Vue.js框架的理解
  9. C++之static关键字探究
  10. [GZOI2017]取石子游戏
  11. 三羊献瑞——第六届蓝桥杯C语言B组(省赛)第三题
  12. StringJoiner
  13. java程序与数据库连接_将Java程序与数据库进行连接的操作方法
  14. 快速制作index.html,介绍一个h5快速制作平台鲁班H5
  15. Candidate是什么
  16. mysql 多维度统计_SQL统计——按照各种维度
  17. “基本系统设备”及“性能计数器”驱动无法安装问题解决
  18. 音频打不开 服务器运行失败,win7系统提示音频服务器未运行的解决方法
  19. 在内核中创建文件 filp_open/sys_open
  20. android sdk manager 快速下载sdk

热门文章

  1. linux centos7安装ftp步骤
  2. 基于javaweb+springboot的物流快递在线寄查快递系统(java+SpringBoot+FreeMarker+Mysql)
  3. java.io.CharConversionException: isHexDigit JS转码问题
  4. [react] Redux基本介绍 ===
  5. Photo MOS 继电器(松下、欧姆龙、力特、东芝)
  6. 重磅:华为方舟编译器开源代码「正式发布」
  7. 关于JAVA实现二维码以及添加二维码LOGO
  8. Could not find artifact ...:pom:0.0.1-SNAPSHOT
  9. js纯原声实现贪吃蛇小游戏
  10. 抖音音乐怎么下载 mp3格式转换器如何使用