摘 要:软件构件的出现提高了软件生产的效率,同时做为SOA的核心技术的ESB提供了综合、灵活而且一致的集成方法。本文在这两种技术的基础上,提出了一种基于ESB的构件开发模式。利用该开发模式,可以快速高效地建立柔性、健壮性、鲁棒性较好的服务构件,并使构件的装配和部署进一步简化,从装配和部署角度提高软件开发的整体速度。该开发模式对各行业领域的软件和构件开发都具有实际的参考价值。
关键词:ESB;软件构件;SOA;开发模式
引言
SOA(Service Oriented Architecture),就是以服务为导向的软件开发思想。它要实现的是服务和技术的完全分离,从而达到服务的可重用性。随着ESB(Enterprise Service Bus)技术的成熟,为基于SOA架构的整合应用的实现提供了基础。软件构件技术的出现使得软件工业向着可组装、可拆卸、可替换、可复用的类似传统工业的生产方式提供了技术基础。同时软件构件技术是软件复用的关键因素,也是软件复用技术研究的重点。而结合了总线技术的软件构件的开发,能使构件开发有统一的开发标准和模式,在基于总线技术的前提下,使得软件构件的装配更简单且更加标准化。
1、企业服务总线(ESB)
1.1 ESB介绍
ESB是面向服务的体系架构(SOA)中不可或缺的一部分。提供了综合、灵活而且一致的集成方法。它的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。ESB的本质是一个对各种服务进行集成管理的核心架构,而不是一个真正的产品。
1.2 ESB的标准
经过进一步量化,在本文中建立一个ESB的标准(目前还没一个统一的标准)。下面是IBM公司宣言的作为ESB广泛应用的功能:
(1)能够在所管理的服务之间实现消息路由;
(2)能够在服务请求者和服务提供者之间实现传输协议的转换;
(3)能够在请求者和服务之间实现消息格式的转换;
(4)能够处理不同来源的业务事件;
(5)一个ESB应该使用户更加关注核心业务,而不是关注如何将各种程序、连接在一起的IT底层基础技术;
(6)一个ESB应该使用户能够在现有的服务中加入新的服务,或者改变现有服务,而没有对现有服务的使用产生影响。
1.3 ESB的组件
要实现ESB的核心功能,需要多个概念性组件。如图1所示:
图1 ESB核心功能的概念性组件
下面是这些组件及其功能的简要描述:
(1)适配器:适配器特定于每个输入和输出机制。输入或输出机制指定消息类型和传输协议;
(2)分配器:分配器组件相当于ESB的集中输入点。它从适配器接收请求,并将该请求传递给任务分配器以便进行路由和消息转换工作。分配器还提供基本的基于内容的路由功能;
(3)请求处理程序:每个服务都有自己的请求处理程序。请求处理程序向路由引擎提供特定于服务的参数,然后将请求提交到路由引擎执行适当的任务;
(4)数据转换器:数据转换器是ESB的关键元素。它转换请求中收到的数据以匹配调 用服务所需的数 据。它是连接服务接口之间的桥梁;
(5)路由引擎和任务分配器:这两个组件负责转换请求并将其路由到服务委托;
(6)服务委托:委托是提供者的特定于终端的组件,这些组件使用适配器与服务提供者终端通信。委托提供关于与提供者终端通信的语义的较粗粒度的抽象;因此,它们特定于终端。另一方面,适配器对较细粒度的协议机制进行抽象化以连接到终端。
1.4 ESB的部署
在实际的部署问题方面已知共有4种部署ESB的模式这些模式和应使用每种模式的条件是:
全局ESB:该模式要求单一的ESB,适用于小型企业或单个业务部门(Line Of Business,LOB)。在此模式下,向所有参与者提供所有服务,如图2所示:
图2 全局ESB
直接连接的ESB:该模式涉及多个直接连接的ESB。此模式使用一个公共注册中心,因此服务在整个企业中可视,如图3所示:
图3 直接连接的ESB
联合ESB:它们类似于由多个ESB连接的直接连接ESB模式。不过,参与ESB的其中之一与其他ESB有主从关系,并控制参与者可以访问哪些内容。企业中希望与其他部门共享其服务的适度自主的部门可以使用第3种模式,如图4所示:
图4 联合ESB
代理ESB:在此模式中,使用代理作为连接的ESB之间的中介。每个ESB都有自己的注册中心,并控制除其自身域之外支持哪种类型的交互。开发并部署自己的服务但希望向企业的其他部门有选择地公开一组服务的自主部门可以使用此模式,如图5所示:
图5 代理ESB
2、构件
2.1 构件的定义
在CBD(Component-Based Development)中,构件(compo-nent)是可复用的软件组成成份,可被用来构造其他软件。简单地说,构件是具有一定的功能,能够独立工作或能同其它构件装配起来协调工作的程序体,构件的使用同他的开发、生产无关。从抽象程度来看,构件将抽象的程度提到一个比类的抽像程度更高的层次,它是对一组类的组合进行封装,并代表完成一个或多个功能的特定服务,也为用户提供了多个接口。整个构件隐藏了具体的实现,只用接口提供服务。
构件分为构件类和构件实例,通过给出构件类的参数,生成实例,通过实例的组装和控制来构造相应的应用软件,这不仅大大提高了软件开发者的开发效率,也大大提高了软件的质量。
2.2 软件构件应具备以下属性
(1)有用性(Usefulness):构件必须提供有用的功能;
(2)可用性(Usability):构件必须易于理解和使用;
(3)质量(Quality):构件及其变形必须能正确工作;
(4)适应性(Adaptability):构件应该易于通过参数化等方式在不同语境中进行配置;
(5)可移植性(Portability):构件应能在不同的硬件运行平台和软件环境中工作。
2.3 软件构件具有以下几个特点
(1)自描述:构件必须能够识别其属性、存取方法和事件,这些信息可以使开发环境将第3方软件构件无缝地结合起来;
(2)可定制:允许提供一个典型的图形方式环境,软件构件的属性只能通过控制面板来设置;
(3)可集成:构件必须可以被编程语言直接控制。构件也可以和脚本语言或者与从代码级访问构件的环境连接,这个特点使得软件构件可以在非可视化开发
项目中使用;
(4)连接机制:构件必须能产生事件或者具有让程序员从语义上实现相互连接的其他机制。
采用构件软件不需要重新编译,也不需要源代码并且不局限于某一种编程语言。该过程叫做二进制复用(Binary Reuse),因为它是建立在接口而不是源代码级别的复用之上的。虽然软件构件必须遵守一致的接口,但是它们的内部实现是完全自动的。因此,可以用过程语言和面向对象语言创建构件。
3、结合ESB的构件开发
3.1 基于ESB的构件的开发
在一般的构件规范中,只定义了构件接口对外所提供的方法,而没有定义构件之间的协作关系,使构件与其他构件的协作信息被固定在构件的实现中,难以适应环境的变化。构件规范对外隐蔽了太多的有用信息,无法满足接口处集成的要求。
本文提出的基于ESB的构件的开发模式,就是将构件的接口关系统一的面向ESB,这样所有的构件都将自己的服务传送到总线上,所有的构件也都从总线上获取自己所需的参数。从而简化了构件接口的设计和构件配置的复杂性。当构件需要替换时,由于是具有统一的接口标准,只要符合此接口标准,就可以对构件进行无缝的替换,甚至是插入新的构件,增加新的功能。而构件的配置问题就成了针对ESB总线的配置,这样一来,使得构件的接口更加趋于统一的标准。同时,这也就ESB的总线服务提出了更高的要求,要求ESB不仅提供基础性的共享服务,还要提供基于消息内容和上下文路由的相关服务。
3.2 基于ESB的构件的装配和部署
显然,基于ESB的构件是围绕着ESB进行装配的,构件与总线进行连接,并进行数据交换和传输。而由此形成的服务,在部署时必然采用联合ESB和代理ESB两种方式,其装配和部署如图6所示。
图6 基于ESB的构件的装配和部署
4、结束语
基于构件的软件开发是软件工程走向成熟的标志,随着SOA各项技术的成熟,ESB的重要性逐渐得到重视。当ESB与构件技术结合,将会使构件的组装、服务的装配形成更加统一的标准化的方式,大大提高软件开发速度和效率,尤其是大型软件的开发。基于ESB的面向构件的开发,从构件开发角度来看,简化了构件接口的设计与实现;从服务构件的部署和配置角度来看,采用联合或代理的部署方式,关注点由构件转移到了ESB上,部署和配置由较为微观的构件配置提高到了较为宏观的ESB总线的配置,使部署和配置得到一定的简化,从而提高了软件生产效率。
参考文献:
[1][美]Carmamcclure.软件复用标准指南[M].王亚沙,谢冰,赵俊峰,译.北京:电子工业出版社,2004.
[2]李艳平.基于复用构件的软件开发方法[J].菏泽学院学报,2008(5).
[3]杨芙清,梅宏,李克勤.软件复用与软件构件技术[J].电子学报,1999(2).
[4]张安勤,周晓峰,王志坚.面向服务的构件模型研究[J].上海电力学院学报,2008(4).
[5]梁爱虎.基于服务总线struts+EJB+Web Service的整合应用开发[M].北京:电子工业出版社,2007.