OSGi学习笔记

OSGi是一种Java动态模块化系统,由OSGI联盟制定,旨在解决Java的模块化局限性,如代码可见性和Class path问题。它提供模块层、生命周期层和服务层,支持动态安装、更新和管理模块。尽管OSGi的优势在于接口编程和动态性,但其复杂性和早期对嵌入式的定位限制了普及。企业级OSGi在处理大数据量和复杂业务场景时能体现价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Osgi学习笔记

一、OSGI基本概念

OSGI是什么

1.  OSGI指开放服务网关协议(OpenServices Gateway initiative

2.  OSGI技术指Java的动态模块化系统的一系列规范(OSGI联盟制定),有时也指OSGI联盟本身。

3.  OSGIJava平台的模块层(《OSGI inAction》)


OSGI
生态系统的全貌

OSGI联盟

1. 职责

定义标准,提供标准的参考实现,提供OSGI的测试套件及OSGI的认证。

2. 三类正式成员

    Strategic MembersIBM):战略成员

    Principal MembersNEC):主要成员

    Contributing AssociatesEclipse):贡献者

3.   非正式成员

    Supporter (由中国公司的身影)

4.  工作模式

    董事会和干事

    专家组:核心平台专家组,企业专家组,Residential(住宅)专家组

    Fellow:研发人员

    Laureates:项目贡献者

 

模块和模块化

1.             模块:module定义了一个逻辑边界,这种模块本身精确的控制了哪些类是完全封装起来的,而哪些类需要暴露出来作为外部使用

2.             模块化:modularity,将一个大型系统分解为多个较小的互相协作的逻辑单元,通过强制设定模块之间的逻辑边界来改善系统的维护性和封装性

Java 模块化的局限性

1.             代码可见性

Java通过面向对象提供了一定的模块化特性(package及访问权限修饰词),但是对于public修饰的类,任何用户都可访问,通常java中可以通过设计模式控制某些类的访问权限。

2.             Class path

Class path 中的jar包在运行时并没有明确的模块边界,多个版本的jar同时存在时有不确定性存在,(jar hell)如下图:

3.             部署域管理

在部署和管理上缺乏有效的支持,比如:模块的动态更新,整个系统的动态烟花,插件化开发。

OSGI提供了什么(详细讲解见后续章节)

模块层:代码的打包和共享

生命周期层:提供运行时管理以及对OSGi框架的访问接口

服务层:模块间的交互和通信

 

1. 模块层

    1.1、 模块层定义了OSGi中的模块Bundle

    1.2 、Bundle是一个具有额外元数据的jar

    1.3Bundle定义了其所包含的包的可见性,可以认为是在public/private/protected的基础上的一个扩展

   1. 4Bundle需定义其所依赖的包。
2.            生命周期层

模块层提供系统的结构,而生命周期层提供系统管理,以维持系统正常运行。生命周期层有两个作用:

    2.1、  模块生命周期的操作(installupdatestartstop…)使得外部可以动态的管理和演化系统

    2.2、  生命周期层定义了运行时上下文的接口,因此bundle本身可以和OSGi框架进行交互,从而实现内部自我管理

3.             服务层

服务层是JVM中的SOA(不能跨JVM?),和bundle一样,是动态的。服务层可以促进开发人员使用基于接口编程的方法,OSGi服务是Java Interface,服务的调用就是Java对象的方法调用

OSGi的最大优势

本质上,OSGi提供了更加严格的模块化特性,更严格的一致性检查,OSGi带来两个最大的优势:

基于接口编程,完全隐藏实现(促进你从架构上思考)

动态性(对扩展开放,即使是运行时)

OSGi为什么不流行

OSGi最初面向的领域是嵌入式,直到应用服务器和IDE开始采用OSGi,才开始引起更广发的注意。另外资料的匮乏带来的误解(只是嵌入式技术,重量级,复杂)以及lib支持不够(很多Lib不能在OSGi环境下运行)

Enterprise OSGi

企业应用往往具有大数据量,大并发量,复杂的业务等特征,因此更需要模块化(系统分层,分布式部署,协作化开发)

TCCL(SPI模式),反射技术在OSGi类加载机制下会有问题

小结

1.             Java平台的模块化支持局限于细粒度的面向对象支持,OSGi提供了更粗粒度的模块化特征

2.             OSGi框架针对Java模块化的局限性提供了强大而不失灵活的解决方案

3.             声明式和基于元数据的方法,使得OSGi使用一种非入侵式的方法提供了强大的模块化能力

4.             生命周期层定义了模块动态且可控的生命周期模型,从而简化系统管理

5.             OSGi通过服务层鼓励采用基于接口编程的方法,从而将接口与实现进行分离。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值