论文摘要
软件工程的主要原则之一是软件的模块化,以提高软件复用的能力。传统的复用过程中一般将功能代码以类库的形式提供,而为了解决模块动态更新、多版本共存等问题,当前的模块复用主要采用模块化框架技术,如Java技术中的OSGi(Open Service Gateway Initiative)。当我们希望将既有类库移植到OSGi框架中时,对大部分的类库来说,这样的移植工作只需要添加必要的元数据信息使其符合OSGi的模块形式。但是有一些类库由于其运行涉及应用的执行上下文,而在OSGi框架中,模块与模块是对等的关系,这种对等关系导致执行上下文的隔离,从而导致这些类库不能直接移植。对于Java技术下类库向OSGi集成框架移植而言,这个问题集中体现为资源加载机制在移植过程被破坏。因此,本文提出了一种面向OSGi的资源加载委派反转机制,该机制通过对OSGi框架下程序运行堆栈中的模块调用顺序分析,来确定类库模块所需加载的资源所在的模块,并在类库模块加载资源时将加载请求委派给资源所在模块的类加载器。通过在Felix框架上进行系统实现和验证实验,我们验证了此机制在OSGi框架下的有效性。具体而言,本文的工作主要包括以下几个方面:1.基于对类库的资源加载方式和OSGi下的资源加载技术的研究,分析当类库移植为OSGi模块、运行于OSGi框架中时由于上下文隔离,不能正确加载资源的问题,提出了面向OSGi的资源加载委派反转机制。2.基于上述机制,提出了对OSGi规范的扩展,通过对OSGi模块层的类加载机制的扩展,使得移植到OSGi框架中的类库能正确加载所需的资源,并在Felix框架中进行了实现,给出了传统Java类库能直接移植的OSGi运行平台。3.在上述平台上,模拟类库模块运行的可能情况做了验证实验,验证了面向OSGi的资源加载委派反转机制的有效性,并通过Hibernate这一典型类库移植实例,展示了平台的实际应用价值。