余 亮 张 轩
(中国电子科技集团公司第二十八研究所 南京 210007)
传统的软件集成技术所开发出来的业务软件都是紧耦合的,当用户需求变化的时候,需要花费很长的周期去调整业务软件,软件的复用程度低,导致用户需求响应时间非常长,而且业务软件的任何一部分出现问题,都会导致整个业务软件无法正常进行。
基于J2EE架构的构件化集成技术采用标准的构件规范,将整个系统拆分成一定数量的构件,构件又按照技术的角度进行分层,而且保证构件和构件是松耦合的,构件和构件之间通过装配的方式组合在一起,能够快速、灵活实现用户的业务需求。
一般地说,软件构件是一种软件单元,它实现了解决某一领域问题的一些功能,并且用环境接口隐藏了这些功能的实现方法,构件一般应具备以下几个基本特征。
·复用性:复用是软件构件最基本的性质,只有可以被复用的构件才有其存在的价值;同时为了提高软件系统的开发速度和质量,只有容易被复用的构件才有其应用的需求。因此,复用应该具有可复用性和易复用性两层含义。
·封装性:构件封装可以对外界隐藏设计和实现细节,仅通过接口与外界交换信息。以接口和接口定义语言为主要内容的构件交互机制实现了描述与实现的分离。对于构件,封装应该满足构件内部的功能实现是紧祸合的,构件之间的关系是松耦合的,这可以保证构件功能复用的完整性和构件开发及交付的独立性。
·组装性:构件通过组装可以实现更大的实体,组装时实施复用的手段。这一点与传统的复用技术有着显著的区别。
·自治性:构件必须能够独立分布和独立运行,它是内含识别其属性、存取方法和事件等信息的黑盒。类似特征是构件独立性、构件的字包含。
·粗粒度性:构件应该代表一定独立的服务功能,是企业级应用系统的一个有效部件,具有粗粒度性。
·接口连接机制:以契约性接口和外部环境相连接,接口是对构件外部特征的唯一抽象。
基于构件的集成方法是按照满足预先定义的功能要求将构件集成到应用系统的过程。每个构件提供服务并向其它构件请求服务,因此,构件接口定义成为关注的焦点。根据构件之间的交互和与周围基础设施的相关性可以将接口类型分为:
·应用程序接口:这些接口定义了与其它构件的交互作用,它们描述了与其它构件交互的导入/导出关系。导出接口描述了构件所提供的功能,导入接口描述构件了构件从其它构件所需求的功能。这种接口层次称为“水平通道”。
·平台接口:这些接口定义了构件与它所运行的平台之间的交互作用,包括操作系统调用、基础的硬件技术及通信系统。因为,一个构件要运行,必须有特定的处理器、内存、通信设备和其他硬件设备支持。这种交互类型与上一种交互类型同样重要。它决定了构件是否可以运行及如何运行。这种层次方法能够帮助设计者规约和设计出独立于程序设计语言和操作系统的构件。一些实现可以有不同的平台接口,但要有相同的设计规约。这种接口层次称为“垂直通道”。
·构件接口定义模型:构件的特性对于有效管理和使用构件是相当重要的,构件接口定义模型提供了一个用于开发、管理和使用构件的基础。它分为三个层次,底部是一个构件的基调(signature)描述,它形成了一个构件与外界联系的基础,包括所需的机制(如交互),表征了构件的功能;第二层是根据应用对构件基调的限制,即使用构件要在一定的限定条件下,构件的基调和限定条件包含了对构件所有能力的定义;第三层是根据构件在给定应用场景中角色对接口基调的包装,根据应用语境的不同,构件接口可以有不同的配置;构件接口的第四个方面是根据构件的非功能属性确定构件的特性,它可以与基调和配置交互。
面向构件的软件开发方法(CBD)的目标是创建可复用构件集,以用于基于构件的应用系统,使得应用程序的开发变成了对构件的挑选、适配、组装的过程。大多数情况下,构件不是拿来就用,构件需要做某种方式的修改以便与其它构件相匹配。更改构件以适应特定应用系统的过程称为构件匹配。适配方法一般分为三类:类型适配,接口适配,行为适配。
1)类型适配。类型适配发生在抽象或一般问题特定化时,这种类型的适配通常由基调匹配工具来完成,它经常与其它适配类型结合使用。例如,当提取的构件与问题的基调不匹配,需要调整接口的类型时,就需要类型适配方法了,另外,在组合构件适配时,需要支持部分接口匹配时,也需要类型匹配的方法。类型适配保证构件在不同的环境中提供所有或有限制的适配。
2)接口适配。接口适配决定构件如何复用以适应问题规约,接口适配的一种常用方式是类型转换,通过一个包装器对源构件进行类型转换形成满足问题规约的目标构件。
3)行为适配。构件的功能是构件在特定环境中所表现出的行为,特别是在与其它构件进行交互时的行为体现,构件的功能可以通过对其行为进行限制来达到定制的目的,也可以扩充其行为而达到扩充功能的目的;另外,可以对几个相关的构件按照它们的交互关系进行不同类型的组合(如顺序组合、并行组合、选择组合等),可以弥补单一构件功能缺乏的问题,当问题规约不能由一个单一构件来匹配时,就可以利用行为适配方法对构件实施不同方式的组合以满足问题规约的要求。
构件规范解决最基本的构件定义问题,分层的构件技术架构通过将业务软件分层,在每一层提供可复用的构件,构件和构件之间通过松耦合的方式实现交互,同时可以针对每一个构件提供相应的监控和运维管理,帮助提高系统的可维护性和稳定性。
要实现构件化集成,首先要解决构件的规范定义问题,J2EE架构下的构件采用国际标准进行定义,如图1所示。
图1 构件规范定义图
构件是以契约化的接口提供服务的功能单元,符合一定标准可替换的程序模块,是对自治的业务概念或业务过程的软件实现。构件可以分为原子构件和复合构件两种。原子构件是一个功能实现单元,是对功能实现的逻辑封装,原子构件是构件的一种,除了具备构件的基本特征外,还具备了实现的特征。所封装的实现可以是具体的Java类,也可以是另外一个构件的实现。复合构件是构件的一种,它是一个执行单元,一个复合构件由一个或多个原子构件组成。服务是构件所提供业务功能的具体表现,通过接口定义一组操作。每个构件可以定义多个服务。属性是运行期需要使用到的配置,是运行期依赖的参数,每个构件有多个属性。引用是构件在运行期需要使用其他构件提供的服务,通过引用,实现了构件与构件之间的松耦合。原子构件的功能实现包括多种方式:Java实现、Spring实现、其他复合构件实现等,实现方式支持扩展。
在构件规范定义的基础上,分层的构件技术架构通过将业务软件分层,在每一层提供可复用的构件,构件和构件之间通过松耦合的方式实现交互,同时可以针对每一个构件提供相应的监控和运维管理,帮助提高系统的可维护性和稳定性。如图2所示。
图2 基于构件的技术框架
分层的构件技术框架由构件包、构件运行服务、J2EE平台、集成技术构件、支撑环境组成。
业务软件被切分成构件包的形式,一个构件包相当于一个可单独部署的业务功能,构件包中内部或者构件包之间通过数据上下文进行数据交互,构件包可以使用基础技术构件和集成技术构件来装配自己的业务构件;
数据上下文用于实现构件包内部各层次之间或者多个构件包之间的数据交互;
构件包是一个物理的部署单元,有且只有一个复合构件,同时包括相关的其他资源文件;构件包可以将小粒度的构件复合成大粒度的构件;构件包是可以独立发布的功能单元,具有大粒度特性;构件包之间可以建议引用或者依赖的关系。如图3所示。
图3 构件包逻辑模型
基于J2EE架构的构件集成技术支持构件之间通过装配的形式组合在一起,实现具体的业务软件。如图4所示。
图4 构件集成装配模型
通过构件化集成技术,可以实现以下能力:
使用这样的构件集成装配模型,开发者能够更加容易、更加迅速的通过构件和构件之间的装配,开发出满足用户需求的业务软件。当用户需求发生变化的时候,也只需要修改其中的一部分构件就行了,大大缩短了用户需求响应时间。
基于J2EE架构的构件化集成技术中,构件和构件之间是松耦合的,针对每个独立的构件都提供了一整套部署、监控、运维功能,能够实时的针对构件进行健康状态监控,及时发现可能存在问题的构件;当一个构件出现问题的时候,可以将该构件从业务系统中屏蔽出去,保证它的问题不会影响其他业务软件功能的运行。
构件技术经过了较长时间的发展,其技术本身较为成熟;松耦合的标准和设计也已经在业界得到了较多的实践;在松耦合的构件技术基础上形成的集成思路和实现得到了公认。
构件技术是伴随软件复用技术成长起来的,是支持软件复用的核心技术,其发展迅速并受高度重视,软件构件技术有望从根本上解决“手工作坊”式的软件开发问题,实现软件开发的产业化。
[1]贺秋芳.基于构件的软件复用技术[J].广东轻工职业技术学院学报,2005,9(03):31-33.
[2]翟广宇.软件构件技术在管理信息系统中的应用[J].兰州工业高等专科学校学报,2004,38(03):35-38.
[3]贾岩.基于构件的软件工程技术研究[J].同济大学软件学院,2011,(06):57-58.
[4]杨璇.基于构件的软件设计方法在解决MIS系统开发和维护敏捷性特征中的应用[J].新疆大学学报(自然科学版),2003,89(01):67-70.
[5]熊兴无.构件复用技术的研究[J].江西省科学技术情报研究所,2011,(12):107-109.
[6]韦加强,潘荫荣.基于J2EE平台和MVC模型的电子政务系统的设计[J].绵阳师范学院学报,2005,(05):34-37.
[7]杨敬君.基于构件的软件复用技术研究与应用实践[J].大连海事大学,2009,(08):55-59.
[8]向伟,蒲国林,杨清平,等.面向服务架构的异构系统集成模型[J].四川文理学院,2011,20(01):22-26.
[9]鲁亚林,傅鹂.面向服务的企业应用集成探讨[J].现代计算机,2006,(11):15-18.
[10]段学东,汪汝.基于J2EE多层框架的在线考试系统研究[J].计算机与数字工程,2008,36(10).
[11]张兴科.基于J2EE的框架技术研究与应用[J].计算机与数字工程,2011,39(6).
[12]董文,谯石,刘敏,等.基于J2EE平台的电子政务系统的设计[J].文教资料,2007,(01):218-219.