1.初识OSGI

OSGI的全称是Open Service Gateway Initiative,直接翻译过来理解很费劲。为了理解这个问题,我们先看看OSGI的设计目的与实现特点是什么。

在传统Web开发中,我们为了进行功能的分离,经常会进行模块划分,比如基础信息模块交由A和B做,接口信息模块交由C和D做。最终,再汇集到一起,组成一个完整的项目。在这整一个流程中,我们做到的只是逻辑上的解耦,最终这些模块还是运行于同一服务器上,共享同一个classpath。这时就会出现一个局限性问题,比如现在接口规范改了,我只想停掉接口信息模块,而基础信息模块仍能正常运行,这显然是无法实现的。

而使用OSGI可以完美解决这个问题,OSGI是基于模块(Bundle)驱动的,每个模块都有属于自己的classpath和类加载器,模块之间通过包暴露和引入进行关联,每个模块有着自己独立的生命周期,我们可以动态地对模块进行加载、卸载、更新。如此看来,OSGI可以用一句话描述,就是一个为Java提供的动态模块化的系统。

2. OSGI中模块的生命周期

在OSGI中,每个Bundle有着下列六种状态,状态图如图2-1所示:

Ø INSTALLED — 成功安装Bundle。

Ø RESOLVED — 所有Bundle需要的Java类可用。这个状态标志着 bundle已经是启动就绪或者是已经停止。

Ø STARTING — 正在启动Bundle。调用了Bundle激活器的start方法,而且还没有从方法中返回。

Ø ACTIVE — Bundle已经启动完毕,正在运行中。

Ø STOPPING — 正在停止Bundle。调用了Bundle激活器的stop方法,而且还没有从方法中返回。

Ø UNINSTALLED — Bundle已经卸载完毕,不能进入其他状态。

图2-1 Bundle生命周期状态图

3. OSGI与SOA

通过前面的说明,我们可以发现,OSGI可以看成是一个服务发布规范,每个模块可以看成是一个服务包,模块可以进行注册、监听,模块间通过暴露服务进行联系,很显然,这是SOA的思想嘛。在OSGI RFC 119之前,OSGI只能运用于单体架构,与主要用于分布式架构的SOA有着本质的区别,RFC 119增加了分布式领域规范,这使得OSGI适用于实现SOA。

4. OSGI现状

OSGI目前在国内只有为数不多的公司和项目有在使用,究其原因,还是它的弊端太大了。OSGI过于复杂,似乎每个程序员用过了都说不好,主要问题有以下几点:

(1)入门门槛高,OSGI规范多达几十个,并包含上千个API;

(2)增加系统不稳定性,由于OSGI类加载机制比较特别,经常会出现不明原因的ClassNotFoundException等异常;

(3)应用性不强,运用OSGI大部分是因为其“热插拔”和Jar隔离特性,但是,如果不是对动态性要求特别高的项目,引入OSGI似乎只是徒增麻烦。

目前,OSGI的应用更多的是因为其模块性和服务性,这与主流的微服务也是融合的,但是其复杂性使得它很难成为主流。

附阿里架构师对OSGI的评价:http://hellojava.info/?p=152

作者:Xx_hpeng
链接:https://www.jianshu.com/p/11dcea36b957
來源:简书

Java模块化之路 —— OSGI介绍相关推荐

  1. 深入理解OSGI:Java模块化之路

    Java可能是近20年来最成功的开发技术,因其具备通用性.高效性.平台移植性和安全性而成为不同硬件平台理想的开发工具.从笔记本电脑到数据中心,从游戏控制台到科学超级计算机,从手机到互联网,Java技术 ...

  2. Java模块化的守护神-OSGi就是这么简单!

    引子 说到OSGi,可能有些人会有些懵,这个概念的知名度确实不像JVM.Spring全家桶等这种"网红"人物这么出名,OSGi联盟成立于1999年,直到2007年的时候,能否采纳还 ...

  3. OSGi介绍及OSGi的Bundle应用

    http://blog.sina.com.cn/s/blog_50356fbb0100dytp.html 关键字: OSGi Bundle Plugin Eclipse 开放服务网关协议 (Open ...

  4. 《Java 进阶之路》 下--推荐书籍

    真正想提升自己,我感觉最主要的是先把 JVM.并发.网络这三块知识点学会.学通,这三块是基础,后面所有的框架.中间件等相关的都是基于这三块知识点之上的.学完这三块知识点,可以快速的掌握其它的知识,新框 ...

  5. 《java 进阶之路》 上--推荐书籍

    整整一月没有更新博客了,因为十月份和双十一新入手的6本技术相关的书,这个月看完了3本,后面的3本还得慢慢肯. 下面我就介绍下进阶高级工程师必须也是我自己都看的一些书和知识点. 1.深入理解Java虚拟 ...

  6. java 模块化osgi_OSGi简介–模块化Java

    java 模块化osgi OSGi联盟是这种搁浅的管理机构,它始于1999年.其最初目标是为网络设备创建开放搁浅. 基于此思想,此规范也针对Java引入. Eclipse在Java中是第一个. 他们于 ...

  7. java 模块化_Java模块化方法–模块,模块,模块

    java 模块化 我想每个人都会同意,编写模块化应用程序和模块化通常是一件好事. 但是,从Java和Scala语言以及各种Java / Scala框架来看,对模块化的支持看起来如何? 有很多不同的方法 ...

  8. java定义list_我的Java Web之路59 - Java中的泛型

    本系列文章旨在记录和总结自己在Java Web开发之路上的知识点.经验.问题和思考,希望能帮助更多(Java)码农和想成为(Java)码农的人. 目录 介绍 再谈Java中的类型 为什么需要泛型? J ...

  9. java学习之路目录(已完结)

    java学习之路目录(持续更新中-) 第一阶段 javaSE(完结) 序号 标题 内容 001 java初识 java语言特点.体系结构.运行机制 002 java SE基础语法 注释.关键字.变量. ...

最新文章

  1. dmalloc 原文 翻译整理
  2. Sweeter Than Fiction - Taylor Swift
  3. SAP RETAIL WA01 创建分配表报错 - Plant 0000000039 Confirmation date not maintained.-
  4. 安卓开发20:动画之Animation 详细使用-主要通过java代码实现动画效果
  5. 2017-8-22 训练日记
  6. 联想王传东回应“宁愿放弃5G也不选华为”言论:纯属谣言
  7. C语言试题三十五之找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。主函数中x是数组名,n 是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
  8. javaWeb服务详解【客户端调用】(含源代码,测试通过,注释) ——applicationContext.xml
  9. java源代码保存在扩展名为,看完跪了
  10. vue部署到服务器_利用Gulp实现代码自动化部署
  11. 同态加密实现数据隐私计算,能让你的小秘密更加秘密
  12. Exchange Server 2016 独立部署/共存部署 (三)—— 安装Exchange程序
  13. php 并发出站,PHP控制站点并发
  14. C#类对象转换成XML
  15. html周志模板,毕业设计指导周志模板
  16. python案例3:货币转换---初级
  17. modbusx协议讲解
  18. Vue动态加载本地磁盘图片
  19. CobaltStrike逆向学习系列(15):CS功能分析-BOF
  20. 【Java】注解入门

热门文章

  1. 手动修改user-agent
  2. Redis双机热备方案--转
  3. 机器学习-数据科学库(第四天)
  4. vue 事件总线EventBus的概念、使用以及注意点
  5. 百度语音识别技术负责人李先刚:如何利用Deep CNN大幅提升识别准确率?
  6. 深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening
  7. JavaScript社区开发者调查:服务端JS盛行 AngularJS使用者最多
  8. JVM - CMS深度剖析
  9. 武汉专科计算机学校排名2015,武汉前十名的大专:2021武汉职校排名榜
  10. java多叉树全路径_算法实战——多叉树全路径遍历