基于osgi的软件构件化方法

基于osgi的软件构件化方法

ID:25645954

大小:196.07 KB

页数:12页

时间:2018-11-21

基于osgi的软件构件化方法_第1页
基于osgi的软件构件化方法_第2页
基于osgi的软件构件化方法_第3页
基于osgi的软件构件化方法_第4页
基于osgi的软件构件化方法_第5页
资源描述:

《基于osgi的软件构件化方法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、1引言当今软件系统复杂性不断增加并且对动态性提出了更高的要求,大型软件项目通常采用构件模型和构件化技术提高系统的可扩展性、易理解性和可重用性。Java技术通过JAR文件、包和命名空间以及类加载机制对基于构件模型的构件化设计开发提供支持,但存在着缺乏动态性、依赖声明、版本控制和信息隐藏等问题[1]。面向服务构件模型将服务计算引入到构件模型中,为构件模型提供了动态性,由此可见构建面向服务基于构件的系统是非常必要的。同时,OSGi是轻量级的面向服务基于构件的框架,用来部署和执行面向服务构件化的应用,并提供了服务注册和服务获取的机制。首先,提高动态性,当构件需要

2、更新和重新部署时无需重新启动系统,真正体现了热插拔和即插即用的特点。其次,提供对其他构件和资源依赖的显式声明,使构件划分清晰。再次,有效的进行版本控制,支持同一系统中多个不同版本包被同时加载。最后,实现了信息隐藏,只对外部提供必要的调用接口,隐藏其他不必要的信息。因此,对现有大型Java工程进行构件化,通过OSGi使系统采用面向服务基于构件的框架,可以更有效的对系统进行开发、维护和管理。但对系统进行框架上的改动是一件艰巨而有挑战性的工作,我们通过对OSGi框架的分析,结合具体实践中遇到的问题,提出了一套切实可行的解决方案。2基于OSGi的软件构件化方法2

3、.1 软件系统结构设计基于分层思想提出了基于OSGi的构件化软件系统总体框架,如图1所示系统大致分为以下四个层次。内核层,采用OSGi实现作为系统执行环境。基础层,包括公共服务、共享资源和第三方JAR等。其中,公共服务Bundle提供上层构件实现中可能会用到的服务;共享资源Bundle提供软件构件层各Bundle可能会用到的共享资源;第三方JARBundle是将原系统中JAR包统一管理,对外提供调用接口。软件构件层,根据高内聚低耦合的原则,对原来的系统进行构件划分,每个构件实现特定的功能,相互之间的功能相对独立。根据实现和接口相分离的原则,每个构件都是由

4、构件的具体实现即软件构件Bundle和构件抽象出来的接口即构件APIBundle所构成。软件构件Bundle调用其他的构件APIBundle和基础层Bundle提供的功能,并且通过构件APIBundle对外提供调用接口。服务提供层,将软件构件层各个Bundle提供的服务接口进行统一管理,以供上层应用开发时使用,便于通过调用底层功能和服务对系统进行扩展。图1基于OSGi的构件化软件系统框架图2.2 基于OSGi的软件构件化方法基于OSGi的软件构件化方法分为两个阶段,第一阶段为软件构件化,第二阶段为构件服务化,如图2所示。第一阶段分析遗留软件以确定构件划分

5、,这一步骤需要领域知识或者已有的文档。根据分析结果,遗留软件被划分为若干低耦合、高内聚的块,它们随后被封装成各个构件。分析各构件之间的依赖,依照这些依赖抽取出构件的接口,使构件之间的依赖都变成以依赖相应接口的形式体现。第二阶段是依照构件的接口构造各个构件提供的服务,目标是提供运行时动态性,服务的注册、发现和绑定都交由底层框架实现,构件提供生命周期接口,供管理员启动、停止和更新服务。 图2基于OSGi的软件构件化方法2.2.1    软件构件化(1)构件划分构件是可以独立部署和卸载的单元,一个构件一般具有一项或几项功能,因此构件化的软件有较高的内聚性。同时

6、,一个构件不需要关心其它构件的实现,它只需要了解其它构件的接口和相应的约定,因此构件化的软件是低耦合的。传统的Java软件系统缺乏有效的信息隐藏机制,各构件之间的依赖是隐式的,经常会出现多个构件共同实现一项功能或者一个构件包含多项功能。我们需要做一些调整,将共同实现一项功能的多个构件合并为一个构件,同时,一个实现多项功能的构件需要被划分为多个构件,并且良好地定义相互之间的依赖关系。OSGi是一种面向服务的体系结构,它不但提供了Package方式共享代码和资源,而且提供了一个定义良好的服务层,支持面向服务的编程。通过使用OSGi的服务层,可以实现系统的动态

7、性,使系统具有较低的耦合性。基于OSGi平台的Bundle实现应该避免强依赖于其他Bundle的资源或服务,即程序不能认为其他Bundle中的资源或服务一定存在,这可以通过具体的编程实现来完成。(2)接口抽取为增加软件的动态性,我们需要将接口与实现相分离。在传统Java开发中,工厂设计模式和控制反转被用来创建对象实例,调用和被调用的对象之间的关系是隐式的。在OSGi环境中,Bundle之间的依赖由延迟绑定机制实现,面向接口的设计方法将接口与实现划分到不同的Bundle中。OSGi在运行时才构成依赖,为每个Bundle提供独立的类加载器,使得我们可以真正的

8、做到面向接口的开发。将接口和实现放在不同的Bundle中,并导出接口Bundle

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。