[发明专利]OSGi中应用资源加载委派反转机制的模块间资源加载方法有效
申请号: | 201310291411.6 | 申请日: | 2013-07-11 |
公开(公告)号: | CN103365690A | 公开(公告)日: | 2013-10-23 |
发明(设计)人: | 曹春;马晓星;吕建 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F9/445 | 分类号: | G06F9/445 |
代理公司: | 南京知识律师事务所 32207 | 代理人: | 张苏沛 |
地址: | 210023 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | osgi 应用 资源 加载 委派 反转 机制 模块 方法 | ||
技术领域
本发明属于计算机领域,涉及到Java的类加载机制,更为具体地,涉及到OSGi中应用资源加载委派反转机制的模块间资源加载方法。
背景技术
软件模块化方法是当今最重要的软件技术之一。软件模块化采用分层或不分层但子模块独立的形式来降低软件系统的复杂度,使得系统的开发变得容易,提高了软件的生产效率;同时由于子模块的相对独立性,使得对于系统的维护也变得容易,提高了系统的可靠性。
软件模块化包含多种形式和相应的技术实现。在Java中,软件模块化最传统的形式就是类库,类库是指可能在多个工程中被重复使用的类的集合。而目前成熟的Java模块化框架则是OSGi(Open Service Gateway Initiative),它不仅支持模块化的概念,还支持软件模块的热插拔,即可以动态管理框架中的模块。
由于OSGi框架已经成为“事实上”的Java模块化标准,并且支持模块热插拔等功能,我们希望可以将类库移植到OSGi框架中去。一般来说,这样的移植工作只需要给原来的类库加上必要的元数据信息,使它们成为符合OSGi规范的模块。但是由于一些类库是作为应用的组成部分,在运行时会运行于应用的上下文中,具体来说,这些类库在运行时需要加载位于依赖它们的应用中的资源,这个加载过程会使用线程上下文类加载器去加载资源,若加载不成功,再使用加载本应用的类加载器去加载资源。但在OSGi中,模块之间是独立对等的,OSGi的每一个模块都有一个独立的类加载器,模块通过使用此类加载器来封装自身,同时,OSGi的规范未定义线程上下文类加载器,也就是说,OSGi标准框架的线程上下文类加载器会是默认的线程上下文类加载器,也就是系统类加载器。OSGi的这种源加载机制导致了这一类的类库在移植到OSGi框架中后不能正确加载资源。
对于此问题,目前只有针对具体类库的一些解决方案,它们或者需要分割应用模块,将相关资源移置到类库模块中,或者需要使用特定OSGi实现框架的属性,并且改变OSGi的类加载机制以使得类库模块可以加载位于依赖于它的应用模块中的资源。
发明内容
本发明的目的是提供一种模块间资源加载方法,此方法使用面向OSGi的资源加载委派反转机制在不改变应用模型以及OSGi本身的类加载机制的前提下,使移植到OSGi中的不同的类库模块能通过本发明的资源加载方法实现的类加载器并行地加载到位于应用模块中的资源。
为了达到上述目的,本发明提出的技术方案为:
OSGi中应用资源加载委派反转机制的模块间资源加载方法,包括:
a.提供一个使用本发明中的资源加载委派反转机制的类加载器作为线程上下文类加载器,并将原线程上下文类加载器设置为此类加载器的父类加载器;
b.对于需要使用线程上下文类加载器的类库模块以及资源所在的应用模块分别作标识,以选择是否使用本发明的资源加载方法加载资源,以及为本线程加载方法中的类加载器指明资源所在模块;
c.在OSGi框架中,若模块使用本发明的资源加载方法加载资源,则在线程上下文类加载器加载资源时,首先同步资源加载过程,在资源加载过程中,通过获取线程调用堆栈,以获取依赖于本模块的其它应用模块,然后根据模块的资源标识,将资源加载委派给相应模块的模块类加载器,以让资源所在的模块来加载资源。
本发明基于一个分析结果:类库模块在使用线程上下文类加载器时,资源一定在此时运行栈中的某个类所在的模块里。分析过程如下:
类库模块的BundleActivator属性为空,也就是说它本身不能作为程序的入口。需要使用类库模块的应用模块需要导入类库模块导出的包,在使用类库模块时,则是由使用类库模块的应用模块来调用类库模块的API来完成。因而对于当前线程来说,其调用顺序一定是:应用模块中的某些类直接或间接地调用类库模块中的某些类,以运行类库模块,然后类库模块中的相应类再调用线程上下文类加载器去加载资源。故在当前的线程调用堆栈中,包含资源的应用模块的某些类位于线程上下文类加载器类的下面,也就是说此时资源位于运行栈中的某些类所在的模块中。
本发明中资源加载委派反转机制的说明:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310291411.6/2.html,转载请声明来源钻瓜专利网。