java 类似osgi_4大Java OSGi 框架比较
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 框架比较相关推荐
- delphi java 类似_【Java二十周年】Delphi转行java的一些小感触
本文纯属1届小码农对java使用进程的体验感触 目录: 初遇java编程语言 与java的擦肩 深入java跨平台性 开源支持 web的支持 初遇java编程语言 刚上大学的时候,完全是个电脑盲.刚入 ...
- java 类似datatable_在java中实现类似于.net中的DataTable,请各位看看,这种方法可行吗?...
由于项目 说句实话,我做起来非常之不爽快,各种不爽快,随便什么地方都想和.net靠近, 所以晚上就写了这个模拟DataTable的简单功能,初步测试是通过了,由于太晚了也不能优化. 现在贴出代码请各位 ...
- java外包恒大,JAVA开发工程师
职位描述: 工作内容: 1.负责完成程序开发.修改.代码质量.测试和部署工作: 2.负责明确和梳理开发需求.设计和评审技术方案,编写和审核各类技术文档: 3.负责管理和协助供应商开发人员有效的开展工作 ...
- java类似goto_原来java中也有类似goto语句的标签啊--java label标签
goto语句的危害: goto语句是在源码级上的跳转,这使其招致了不好的声誉.若一个程序总是从一个地方跳到另一个地方,还有什么办法来控制程序的流程. java中的"goto": 虽 ...
- 从底层重学 Java 之两大浮点类型 GitChat链接
chat连接 https://gitbook.cn/gitchat/activity/5f03fdd3852a4f3686fb3366 简介 从底层,从原理,我们来重学一次 Java.两大 Java ...
- 从底层重学 Java 之两大浮点类型 GitChat连接
从底层,从原理,我们来重学一次 Java.两大 Java 浮点类 Double.Float 是我们比较常用的对象,他们的源码及实现是怎样的呢? 本系列秉承所有结论尽量从源码中来,没有源码的尽量标明出处 ...
- OSGi 规范和框架 OSGi框架类加载机制 Java默认类加载器机制和OSGI类加载器机制比较
一.OSGi 规范 OSGi(Open Service Gateway Initiative) 技术是 Java 动态化模块化系统的一系列规范.OSGi 一方面指维护 OSGi 规范的 OSGi Al ...
- 最适合Java开发者的大数据工具和框架
http://www.xsh-gz.com/javatrain/20170104/2222.html 转自 最适合Java开发者的大数据工具和框架 发布时间: 2017-01-04 17:12:58 ...
- Java的3大框架都学习什么呢?
Java是互联网行业的第一编程语言,相信大家都已经有了解了,事实也确实如此,Java还是世界第一编程语言,在学习Java的过程中,框架是程序员们必学的知识点,而且是十分重要的应用,Spring.Str ...
最新文章
- web服务器错误配置文件,web服务器http配置文件
- LeetCode 236. 二叉树的最近公共祖先
- nodejs入门教程之http的get和request简介及应用
- python绘图实例-Python——matplotlib基础绘图函数示例
- Pair Programming 1 (Casual Game) 曹竹 杨牧 贪吃蛇游戏扩展 Blog Report
- mod_pagespeed
- python用缩进来标明代码的层次关系_8-1-Python设计案例.pptx
- js中立即执行函数会预编译吗_面试官:聊聊对Vue.js框架的理解
- C++之static关键字探究
- [GZOI2017]取石子游戏
- 三羊献瑞——第六届蓝桥杯C语言B组(省赛)第三题
- StringJoiner
- java程序与数据库连接_将Java程序与数据库进行连接的操作方法
- 快速制作index.html,介绍一个h5快速制作平台鲁班H5
- Candidate是什么
- mysql 多维度统计_SQL统计——按照各种维度
- “基本系统设备”及“性能计数器”驱动无法安装问题解决
- 音频打不开 服务器运行失败,win7系统提示音频服务器未运行的解决方法
- 在内核中创建文件 filp_open/sys_open
- android sdk manager 快速下载sdk
热门文章
- linux centos7安装ftp步骤
- 基于javaweb+springboot的物流快递在线寄查快递系统(java+SpringBoot+FreeMarker+Mysql)
- java.io.CharConversionException: isHexDigit JS转码问题
- [react] Redux基本介绍 ===
- Photo MOS 继电器(松下、欧姆龙、力特、东芝)
- 重磅:华为方舟编译器开源代码「正式发布」
- 关于JAVA实现二维码以及添加二维码LOGO
- Could not find artifact ...:pom:0.0.1-SNAPSHOT
- js纯原声实现贪吃蛇小游戏
- 抖音音乐怎么下载 mp3格式转换器如何使用