冯汝康
(内蒙古自治区烟草公司,内蒙古呼和浩特 010010)
随着软件工业的发展,软件产品的实现过程和技术愈发复杂化。为实现软件的高度重用性,基于组件的软件开发(Component Based Software Development,CBSD)方法被提出[1],同时Web 服务的广泛使用和面向服务架构(Ser⁃vice-oriented Architecture,SOA)的快速发展导致大量不同类型的功能组件出现。如何在数量众多的功能组件中发现满足应用系统需求的功能组件并实现动态绑定是亟待解决的问题。
目前,已有大量文献对功能组件进行了研究。例如,文献[1-4]研究了基于组件的软件开发技术、平台框架设计以及发展现状;文献[5-9]重点研究了语义网络的含义、表示方法、逻辑推理等基本概念以及相关工具,同时还研究了依据组件功能进行语义描述与推理的方法;文献[10-14]重点研究了基于UDDI 和jUDDI 实现功能组件管理框架的算法;文献[15-20]重点研究了基于OQS 的Web 服务发现、功能组件选择与动态绑定算法,并阐述了如何优化算法性能。本文在以上研究成果的基础上研究Web 服务的多种调用方法,基于Web 服务调用框架(Web Service In⁃vocation Framework,WSIF)的功能组件统一调用语义网络及OWL-S,提出基于语义推理的功能组件动态绑定框架。
万维网协会(Worldwide Web Consortium,W3C)给出了Web 服务的定义,即可以跨平台操作,将因特网、外联网以及内联网连接的分布式服务器上的应用集成到一起的服务[2-3]。Web 服务是单一、组件化的程序功能模块,能够在网络,特别是万维网上进行描述、发布、定位及调用。Web服务的体系结构包含3 个角色,分别为Web 服务提供者(Provider)、Web 服务请求者(Requester)和Web 服务管理者(Registry),以及3 个操作,分别为发布、查找、绑定。3个操作分别使用3 种完全不同的技术,其中发布服务采用UDDI 统一描述、发现和集成,查找服务采用UDDI 和WS⁃DL 的组合,绑定服务采用WSDL 和SOAP。无缝的互操作得以实现正是由于Web 服务提供者和请求者均支持和使用SOAP 规范。
Web 服务是基于WSDL、SOAP 等统一网络标准开发的应用程序,其通常在底层通过绑定Http 等成熟的网络通信协议进行交互,因此调用Web 服务可以通过编写Http 请求消息实现,通常使用HttpClient、Xfire、axis2 生成stub 以及Apache的Web服务项目中开源的子项目WSIF[4]实现。
WSIF 对外提供简单的接口,用户使用WSIF 调用Web服务,无需知道该Web 服务的实现细节[21]。WSIF 还提供了一组基于WSDL 文件的调用接口,即只要是使用WSDL文件描述的服务都可以使用WSIF 调用,如Web 服务、本地Java类、EJBs、JMS services 等类型的组件。
语义网络是人工智能领域广泛应用的一种知识表达形式,互联网中的语义网络即Semantic Web,其通过将自由文本内容结构化,以便计算机程序自动处理Web 内容[22]。语义推理则是计算机基于语义网络对不同概念进行推理,发现其内在关系,以实现智能化处理。
语义网络通过给万维网上的文档(如HTML)添加通用的语义(Meta data)信息,使计算机能够理解文档所包含的语义而自动处理。例如文献[5]中将语义网络看成Web 向结构化数据的演进,给出的结构如图1所示。
Fig.1 Semantic Web architecture图1 语义Web体系结构
OWL 是一种语义Web 本体描述语言,包括3 个子语言,分别为OWL Full、OWL DL 和OWL Lite。文献[6]在DAML-S 的基础上提出一个用于描述Web 服务属性和功能的OWL 本体规范OWL-S,而采用OWL-S 描述的Web 服务是计算机可以理解的。OWL-S 主要从3 个方面对Web服务进行刻画,分别为ServiceProfile、ServiceModel、Service⁃Grounding,其中ServiceProfile 描述服务做什么,Service⁃Model描述服务如何工作以及具体的逻辑执行顺序等,Ser⁃viceGrounding 描述如何访问服务以及与服务具体实例相关的属性[23]。
功能组件语义描述十分重要,有了相关语义信息的描述,在发现功能组件时便可以进行语义匹配,提高匹配质量。
使用OWL-S 描述Web 服务的语义信息,其他类型的功能组件可以封装为Web 服务,然后通过使用OWL-S 描述封装后Web 服务的语义信息间接描述相应功能组件的语义信息。封装对于Web 服务组件本身的功能、参数类型都没有影响,只是改变了对外发布信息的形式和调用方式,因此可以直接将描述Web 服务功能的OWL-S 文件用于描述具有相同功能的其他类型功能组件。在描述其他语义信息,如接口、参数、组件模型等,只需填入相应的信息,便可以借助Jena 等开源软件包提供的推理功能实现基于语义的推理。
Jena 是一个开源的基于Java 开发的Web 工具包,其提供了基于语义推理的API,用于解析RDF、RDFS 及OWL 本体,同时还包括一个基于规则的推理引擎,用户可以定制推理规则。Jena 的接口说明及详细使用方法参见文献[7]。
功能组件数量众多,具有同一种功能的组件也有很多,调用时需要进行功能组件动态绑定,主要包括两个步骤:一个是基于语义推理的功能组件发现,即发现满足应用系统需求的所有功能组件;另一个是动态绑定最优功能组件,即依据功能组件此时的负载程度与服务质量,选择一个负载最低、服务质量最高的功能组件进行绑定[8]。在Web 服务上的两个操作已有很多研究成果,例如文献[9]提出一种基于Web 服务质量评价模型和负载平摊策略的Web 服务动态绑定算法。基于以上研究成果,本文提出基于语义推理的功能组件动态绑定框架,结构如图2所示。
Fig.2 Framework structure of dynamic binding of functional compo⁃nents图2 功能组件动态绑定的框架结构
UDDI 是一种目录服务,企业可以使用它对Web ser⁃vices 进行注册和搜索,用户能够通过它快速、便捷、动态获取Internet 上的服务[24]。Apache jUDDI 是采用Java 开发的一个开源UDDI 项目,其提供了基本的服务管理功能,包括服务信息存储、服务注册以及基于关键字匹配的服务发现,然而jUDDI 缺少对语义的描述,目前已有很多扩展UD⁃DI可使其支持语义描述的方法[10-12]。
本文通过修改jUDDI 的数据结构,在tModel 中添加一项指向语义描述文件存放位置(对于网络上的资源可以是URI 地址)。将各种功能组件注册到本地jUDDI 上,从其上发现功能组件并进行动态绑定[13]。具体修改内容为:①添加语义文件链接项,在tModel 数据表中添加一个SEMAN⁃TIC_URI 项;②修改源代码,将源代码中出现OverviewDoc和OverviewURL 的地方都添加上SemanticDoc 和Semanti⁃cURI 的对应代码;③在org.apache.juddi.datatype 中编写Se⁃manticDoc 类和SemanticURI 类;④在org.apache.juddi.han⁃dler 中编写SemanticDocHandler 类和SemanticURIHandler类;⑤修改相应的类,添加与OverviewDoc 和OverviewURL相似的代码。
此外,为了可以在jUDDI 上存储和统一管理其他类型的功能组件,本文在Web 服务信息模版的基础上添加相应功能组件信息。表1 中列出了几项本地Java 类与Web 服务在注册时所需信息的对应关系。
功能组件发现是指从注册在组件代理系统上的功能组件中发现满足应用系统需求的功能组件。本文在对jUDDI进行扩展的基础上,对功能组件进行统一语义匹配。
Table 1 Information correspondence relationship表1 信息对应关系
首先基于公共领域本体库和Jena 的推理机制,推理出应用系统请求文件中三代以内的相关关键字,形成请求关键字集;然后使用jUDDI 对这些关键字进行功能组件发现,得到功能组件候选集合,最后进行语义匹配。具体步骤为:①解析应用系统请求XML 文件,获得与功能相关的关键字;②在领域本体中推理查询三代以内的关键字,形成请求关键字集合;③基于关键字匹配进行功能组件发现,对于请求关键字集合中的每个关键字,在jUDDI 中进行匹配,获得进行语义服务匹配的候选功能组件集合;④采用OWL 文件解析器解析出输入/输出、前提/效果元素,再分别送入IOPE 匹配器中进行IO 和PE 匹配,具体匹配方法参见文献[14];⑤IOPE 匹配器根据功能组件输入、输出、前提、效果的匹配度排序形成一个候选功能组件集合;⑥如果没有找到满足应用系统需求的功能组件,则将该应用系统请求文件发布到ESB 和网络上,进行更大范围的服务发现。
功能组件动态绑定是指在通过功能组件发现得到的满足应用系统功能需求的功能组件候选集合中选择一个功能组件进行实际调用以响应用户请求。其选择依据多种多样,可以是功能组件的负载程度、质量高低(响应时间、可靠性、可信度等质量属性)。动态绑定流程如图3所示。
Fig.3 Flow of dynamic binding图3 动态绑定流程
具体步骤为:①对候选功能组件集合中的每个功能组件进行预调用处理,记录功能组件通用QoS 属性(如功能组件当时的负载程度、响应时间等)的取值,并将这些取值存储到QoS 属性库中;②如果有当时可用的本地功能组件则选择该功能组件,否则计算功能组件的QoS 质量总值[15-20],并依据服务质量高低进行等级排序,从集合中删除服务质量等级相对较低的功能组件;③根据功能组件评价结果确定最优绑定功能组件;④进行实际绑定,调用相应的功能组件。
本地功能组件在服务质量方面与网络上的功能组件相比有很大优势,如果候选功能组件集合中有该功能组件,则优先绑定本地实现的功能组件;当有不同类型的本地功能组件时,则绑定与应用系统同属统一平台的功能组件。
以向卷烟零售户推送卷烟订单服务为例,该服务需要绑定获取零售户销售周期、零售户单品卷烟销售情况、零售户单品卷烟库存情况、零售户资金情况,然后形成并推送订单服务。采用传统方法与本文方法构建应用的时间分别见表2、表3。传统方法共需要37.5min,基于语义推理的功能组件动态绑定框架共需要7min,可见该框架框建应用系统的效率比传统方法提高了4倍。
Table 2 Time consumption of traditional method表2 传统方法耗时
Table 3 Time consumption of dynamic binding framework of func⁃tional components for semantic reasoning表3 基于语义推理的功能组件动态绑定框架耗时
本文研究了Web 服务的多种调用方法,并在WSIF 功能组件统一调用、语义网络及OWL-S 的基础上,提出了基于语义推理的功能组件动态绑定框架。该框架能动态发现并绑定满足需求的功能组件,根据需求快速构建应用系统,免去了人工比对服务描述、重新绑定功能组件的步骤,提高了应用系统构建效率。目前该框架还有很多需要优化和解决的问题,下一步将重点研究语义推理与功能组件匹配算法,进一步提高匹配效率。