欢迎来到天天文库
浏览记录
ID:31359386
大小:117.00 KB
页数:12页
时间:2019-01-09
《基于osgi的类资源冲突机理与消解方法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于OSGi的类资源冲突机理与消解方法 摘要:作为面向服务计算泛型的一种重要实现手段,OSGi为构建具有模块化、“即插即用”、可动态持续演化的软件系统,提供了一个强大的通用化平台和规范支持。针对层次化类装载器代理体系下,OSGi服务平台中类资源装载冲突问题,从基于Java平台的OSGi类装载体系出发,对造成类资源冲突的基本原理进行分析,给出消解冲突的基本原则。提出了遵循该原则的基于第三方共享Bundle、及静态和动态资源冲突检测的冲突消解方法,并给出了方法的具体实现方式。 关键词:Java类装载器;OSGi;类资源冲突;冲突消解方法 中图分类号:TP311
2、文献标识码:A文章编号:1009-3044(2016)15-0074-04 随着计算机软件与互联网技术的快速发展,软件计算泛型大致经历了从面向对象、面向构件到面向服务计算(SOC)泛型的转变。SOC是一种以服务为基本元素,进行软件应用和解决方案设计、实现的软件计算范型,反映了自治、异构的互联网环境中软件的构件化趋势[1]。近年来,得到广泛关注的云计算技术也是以服务为核心的一种新的应用与商业模式[2]。12 OSGi是具有开放、通用软件架构的服务平台规范,为服务提供者、开发者等提供一种协作完成服务开发、部署与管理的模式[3],是SOC泛型的一种重要实现手段[4
3、]。OSGi支持基于可复用服务插件的可插拔软件系统的构建,能以插件为粒度实现软件行为的动态改变,通过插件间隔离保障系统运行时的稳定性与可靠性。目前,OSGi已得到众多企业、厂商、开源组织的支持,如Apache、Eclipse、Spring等,并已成为事实上的Java模块化公认、通用标准[5]。目前,OSGi技术已在智能家庭网络[6],嵌入式软件[7,8],传感器网络[9]等领域得到关注与初步应用。 OSGi的类装载机制,提供了灵活、安全、独立的类装载能力,但常常导致潜在的类资源的装载冲突问题,进而提高Bundle开发、第三方Bundle集成的复杂性,增加系统实
4、施的成本,甚至限制OSGi技术在大型、专业软件公司之外的普适性推广与应用能力。因此,理解和掌握OSGi服务平台技术体系下类资源冲突机理,并采用适合的消解方法,已成为该领域基础理论研究与发展,及工程实施与应用推广所面临的重要基础性问题之一。 1相关技术 OSGi服务平台中Bundle相关的类资源装载,依赖于Java平台的虚拟机的实现(如无特殊说明,下文提及虚拟机均指代Java虚拟机)。 虚拟机的主要任务是装载Class文件,生产字节码,并将字节码交由运行时引擎执行[10]。类装载器是虚拟机一个重要的组件,负责完成从应用程序和JavaAPI中装载Class文件
5、,JavaAPI实际上是Java平台提供的系统类资源。同一个虚拟机中可以存在多个类装载器的实例,形成灵活的虚拟机运行时类装载器体系,如图1所示:12 不同类型的类装载器实例,构成了一个运行时类装载的代理体系,形成类装载器的父/子层次关系。当虚拟机需装载某一Class文件时,会从应用类装载器(如存在)开始,逐层代理给系统类装载器、扩展类装载器和启动类装载器。子装载器会为其父装载器提供一个类装载机会,以便装载任何给定的类,并且只有父装载器失败时,其子装载器才会进行类的装载[11]。上述类装载器在装载类时,实际上是搜索不同的Class文件的存放路径。例如:扩展类装载
6、器搜索Java平台的ext目录,而应用类装载器搜索自定义的类存放路径,可以是本地文件系统,也可以是网络文件目录。 理解装载器体系的代理关系,以及不同类型装载器的Class文件搜索方式,是理解OSGi技术体系下类资源冲突的基础,本文将在第2节对这种冲突的成因和机理进行分析。 2冲突机理分析 虚拟机层次化、可扩展的代理装载体系,能控制不同来源的Class文件中装载类资源之间的相互影响,这种特性是OSGi通过类装载机制实现不同Bundle间运行时隔离的技术基础。正因为如此,OSGi规范的实现(Felix、Equinox)绑定为Java平台,而非诸如.NET、C+
7、+等语言平台。 Bundle是OSGi实现Java模块化的最基本单元,Bundle的类资源可以从多种途径获得,包括:Java平台的系统类资源,通过import、require和fragment方式来自其他Bundle的类资源,以及Bundle本地私有的类资源[3]。每个Bundle均拥有一独立的类装载器负责本地类资源的装载,并共享Java虚拟机、OSGi容器提供的全局性类装载器。为了保证模块的隔离性,Bundle间通过导出和导入包的方式,隐藏内部实现细节,并通过服务接口调用其他Bundle提供的服务。这种机制下,Bundle间的接口调用是一种典型的客户/服务器
8、关系。基于Java平台的
此文档下载收益归作者所有