【JVM】OSGi 灵活的类加载结构
来源:互联网 发布:小米6首选网络类型 编辑:程序博客网 时间:2024/06/04 16:56
一、OSGi是什么
OSGi(Open Service Gateway Initiative),是面向Java的动态模型系统,是Java动态化模块化系统的一系列规范。
OSGi服务平台提供在多种网络设备上无需重启的动态改变构造的功能。为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方。
二、OSGi的结构是怎样的
既然OSGi是动态模型系统,那么它的结构又是怎样的呢。
OSGI规范的核心组件是OSGI框架。这个框架为应用程序(被叫做组件(bundle))提供了一个标准环境。整个框架可以划分为一些层次:
- L0:运行环境
- L1:模块
- L2:生命周期管理
- L3:服务注册
还有一个无处不在的安全系统渗透到所有层。
(1)L0运行环境
L0层执行环境是Java环境的规范。Java2配置和子规范,像J2SE,CDC,CLDC,MIDP等等,都是有效的执行环境。OSGi平台已经标准化了一个执行环境,它是基于基础轮廓和在一个执行环境上确定了最小需求的一个小一些的变种,该执行环境对OSGi组件是有用的。
(2)L1模块层
L1模块层定义类的装载策略。OSGi框架是一个强大的具有严格定义的类装载模型。它基于Java之上,但是增加了模块化。在Java中,正常情况下有一个包含所有类和资源的类路径。OSGi模块层为一个模块增加了私有类同时有可控模块间链接。模块层同安全架构完全集成,可以选择部署到部署封闭系统,防御系统,或者由厂商决定的完全由用户管理的系统。
(3)L2生命周期层
L2生命周期层增加了能够被动态安装、开启、关闭、更新和卸载的bundles。这些bundles依赖于于具有类装载功能的模块层,但是增加了在运行时管理这些模块的API。生命周期层引入了正常情况下不属于一个应用程序的动态性。扩展依赖机制用于确保环境的操作正确。生命周期操作在安全架构保护之下,使其不受到病毒的攻击。
(4)L3服务注册层
L3层增加了服务注册。服务注册提供了一个面向bundles的考虑到动态性的协作模型。bundles能通过传统的类共享进行协作,但是类共享同动态安装和卸载代码不兼容。服务注册提供了一个在bundles间分享对象的完整模型。定义了大量的事件来处理服务的注册和删除。这些服务仅仅是能代表任何事物的Java对象。很多服务类似服务器对象,例如HTTP服务器,而另一些服务表示的是一个真实世界的对象,例如附近的一个蓝牙手机。这个服务模块提供了完整安全保障。该服务安全模块使用了一个很聪明的方式来保障bundles之间通信安全。
三、总结
OSGi旨在为实现Java程序的模块化编程提供基础条件,基于OSGi的程序很可能可以实现模块级的热插拔功能,当程序升级更新时,可以只停用、重新安装然后启动程序的其中一部分,这对企业级程序开发来说是非常具有诱惑力的特性。
OSGi描绘了一个很美好的模块化开发目标,而且定义了实现这个目标的所需要服务与架构,同时也有成熟的框架进行实现支持。但并非所有的应用都适合采用OSGi作为基础架构,它在提供强大功能同时,也引入了额外的复杂度,因为它不遵守了类加载的双亲委托模型。
由于笔者没有OSGi的系统级开发经历,就不缀余,大家可以去OSGi中文社区http://www.osgi.com.cn/学习。后面再补充实战实例
- 【JVM】OSGi 灵活的类加载结构
- OSGI的类加载机制
- 【OSGi】OSGi类加载流程
- 【OSGi】OSGi类加载流程
- 【java】JVM结构和类的加载原理
- Part4. OSGi的类加载架构
- osgi框架的结构
- OSGi类加载流程
- java jvm-类加载器层级结构
- jvm类的加载
- JVM-类的加载
- 家庭网络环境下基于OSGI的灵活授权
- 【JVM】JVM的类加载学习
- OSGi与类加载器
- JVM的类的加载
- OSGI学习系列(四)类的加载
- JVM 的类文件结构
- jvm的类加载器
- MD5算法工具类
- 小米科技-运维工程师-面试经验下
- HDOJ2007
- jquary笔记 选择器 选择器的过滤 函数 动画 特效 属性操作 事件 元素节点操作等
- 【Android开发点滴】自定义Toast样式
- 【JVM】OSGi 灵活的类加载结构
- python Django 学习
- !浏览器内核常驻线程
- POJ 3348(计算几何+二维凸包+多边形面积)
- 常用html字符实体
- Mac上安装Python相关扩展包异常
- 小米智能云-秋招转正面经
- 线性表分成两部分后,进行两部分的倒置
- MySQL 存储引擎(MyISAM、InnoDB、NDBCluster)