集成现有基于万维网的系统的方法和系统的制作方法

文档序号:7967279阅读:199来源:国知局

专利名称::集成现有基于万维网的系统的方法和系统的制作方法
技术领域
:本发明涉及将现有基于万维网的应用系统集成为面向服务的系统,具体涉及一种利用模型驱动方法将现有基于万维网的应用系统集成为面向服务的系统的方法以及由此形成的面向服务的系统,并且还涉及为用户提供这种服务的方法。
背景技术
:在集成或者重用现有基于web(万维网)的系统时,有时现有基于web的系统未对外部系统访问进行良好的设计。没有API(应用程序接口)层可用于进行交互。更糟糕地,显示(presentation)逻辑、业务逻辑和数据逻辑通常混合在一起而没有适宜地分开来考虑。因此,与这种系统进行交互的唯一方式就是通过如web浏览器的HTTP/HTTPS上的网页、HTML/XHTML或者其它标记语言。对于这样的情形,如何将人-机交互方法转换为机-机交互方法,使得能够将其功能和数据表现为对于应用集成可重用的服务?对这种情景存在一些现存的解决方案1.系统重新工程化(re-engineer):重新工程化现有系统,以便将业务逻辑表现为良好设计的机器对机器可访问的接口,如EJB、web服务。2.定制适配器对特定页面开发定制的适配器,以提取有用的信息;重复编写成百的代码来解析HTML树的结构,对每个网页提取有用信息和返回结果;融合每页面的结果来构成有用的信息。上述方法的缺点在于通常,系统重新工程化需要分析现有系统架构和代码以便对系统架构具备深入的理解;挖掘和重新工程化现有系统的现有资源,使其良好地结构化和分层;通过良好设计的接口表现业务逻辑。因此,重新工程化的工作太繁重或者复杂而承受不起。在系统未良好设计时,需要的工作量甚至可能多于从零做起而重建该系统。通常比较老的系统几乎4艮难找到维护文档和代码设计的详细说明。没有设计文档,或者文档与演进的代码相比是如此陈旧而没有意义,那么重新工程化就变得高风险,因为重新工程化的开发人员常常从未参与过现有系统的开发。有时,没有源代码而仅仅有二进制映像,使得无法进行重新工程化。定制适配器的方法需要针对每个不同的场景分别编写不同的代码,通过分析页面,模拟流程来实现目的。这种方法不是模型化的,自动化程度不够,效率比较低,有很多重复工作。并且如果流程有一定变化或者页面结构有变化时,需要修改代码的工作量比较大。具体地,这种方法对于从几个特定页面提取信息是好的,但在处理大量页面时,其非常耗时而且不是那么有效率,因为它不具有统一的方式来处理所有情形。更糟糕地,这种方法中不存在一种机制来将各功能表现为对用于应用集成的逻辑上内聚而且完整的服务,更不用说安全和会话管理了。
发明内容实际上,企业的现有应用很多是基于HTML(Web)的,但是由于当时技术的限制,这些应用没有很好的把业务逻辑和显示逻辑分离或者没有适当的接口以便于将应用转化为服务,当企业想向基于服务的架构转移时,改造现有应用系统就成了一个工作量很大的或者几乎不可能的任务。在这种情况下,如果直接从最终表示结果页面入手,把符合一定规律的、在交互过程中本质上不需要人做决定和输入的人机交互给予适当的元模型定义,并通过对元模型建立模型实例让机器自动解释执行并取得最终结果,这将大大筒化改造。因此,本发明的一个目的在于提供一种将现有基于万维网的应用的集成为服务的方法,其能够简化将现有基于万维网的应用集成为服务的工作量。所述方法还可以对一些安全和会话的属性和异常处理进行集中的控制。本发明的另一个目的在于提供一种面向服务的系统和为用户提供服务的方法,其能够容易而有效率地集成现有基于万维网的应用,实现将现有基于万维网的应用集成为服务的可重用性。为了实现上述目的,本发明提供一种面向服务的系统,用于集成现有基于万维网的应用而形成为用户提供的服务,该系统包括服务入口,用于接收用户提交的包含输入数据集合的服务请求;服务代理接口,通过集成现有基于万维网的应用而形成,用于将用户提交的服务请求中的输入数据集合转换为所请求的服务可识别的输入参数,并且根据用户提交的服务请求装载对应于所述服务的模型定义文件,该模型定义文件通过集成现有基于万维网的应用而形成;以及执行引擎,根据服务代理接口转换的输入参数与外部资源进行交互,并且将从外部资源获得的信息返回服务代理接口。本发明还提供一种为用户提供服务的方法,所述服务通过集成现有基于万维网的应用而形成,所述方法包括提供服务入口;在服务入口接收由用户提交的包含输入数据集合的服务请求;将用户提交的服务请求中的输入数据集合转换为所请求的服务可识别的输入参数,并且根据用户提交的服务请求装载对应于所述服务的模型定义文件,该模型定义文件通过集成现有基于万维网的应用而形成;以及根据转换的输入参数与外部资源进行交互,并且将从外部资源获得的信息返回用户。本发明还提供一种将现有基于万维网的应用的集成为服务的方法,包括以下步骤提供元模型;根据元模型对现有基于万维网的应用进行服务模型定义;将形成的服务模型转换为服务包装代码和服务的模型定义文件;将服务包装代码进行部署,从而在运行时环境中产生服务代理接口,以便由服务的客户端调用。本发明提出一种适应性比较强的元模型以及使用这个元模型把现有的基于HTML(Web)的应用转化为各种所需服务的方法。本发明包括一个元模型,用于定义常见的浏览HTML的关键元素,比如页面的热点数据,页面之间的链接流转,页面的安全登陆标识等;一个执行引擎,通过给它输入用户定义的模型实例,自动遍历相应的页面并从中提取模型所定义的结果;一个定义实例模型的图形化工具,用于帮助用户基于以上元模型来定义自己所需的服务并自动产生服务接口和执行代码。本发明基于元模型,该元模型能够描述现有基于web的系统,如一感兴趣页面的热点,页面的流如何对内聚而且完整的服务逻辑进行组织,以及异常处理、安全处理、会话管理。利用这种元模型,能够将一服务模型化为所处理页面的一个流,而处理由热点模型化,其帮助从各页面提取信息,并且确定如何与现有web应用系统交互。然后提供MDD方法(模型驱动的方法)来自动生成服务外表(facade)。该元模型足够来有效和完整地定义多数普通情形。本发明可以使开发人员只需要M示层出发和考察,通过定义一些关键数据来产生所需要的服务,而无需研究和改造现有应用程序的结构和代码。这使得从已有HTML应用中构造各种所需要的服务更加方便。通过本发明,对于大部分本质上不需要人工干预的页面流转的应用,可以大大简化将其转化成服务的工作量,特别当企业的各种基于HTML的传统复杂应用没有很好的接口可用于服务转化的情况下,本发明为企业转型成面向服务的架构提供一条便捷之路。需要指出的是,不是所有的情况都可以通过本发明得到帮助,本发明比较适合流程和页面结构比较固定或者有明确规律性的、可枚举的场景,而以下的一些场景难以适用本发明1)页面流转过程中,本质上需要人做主观判定和输入的;2)现有应用页面流转牵涉到动态逻辑的情形,比如页面的结构和元素由客户端脚本或者本地化的控件动态控制,缺少规律性、无法枚举的。例如,有时页面中存在嵌入式交互逻辑,如Javascript(Java脚本)或者甚至ActiveX控件或者其它插件程序(plug-in),那么本发明中的元模型不能定义它们。因为大部分基于Web的应用,特别是企业级的应用,页面结构和流程是比较稳定和静态的,所以本发明的适用范围还是很大的。本发明提供的优点列举如下*不需要重新工程化工作及分析目前系统的内部结构。*仅仅需要使用元模型描述各页,而代替对每页创建定制代码,因而更加有效率、灵活而且花费更少的工作量。易于^f吏用。*具有统一的方式来处理非业务关注(cross-cuttingconcerns),如会i舌管理和安全,这使得企业级应用的转换更具内聚性(cohesive)。图1图示了使用UML(统一建模语言)表示的本发明一实施例的元模型定义。图2图示了在根据本发明的一实施例中利用元模型将现有基于HTML的页面数据和流程转化为服务的方法的框架图。图3图示了根据本发明的一实施例中面向服务的系统的结构示意图及其执行流程,以便实现需要的服务。图4图示了根据本发明一实施例的执行引擎的结构及其基本工作流程。具体实施方式本发明的模型驱动的方法提供一种元模型,其便于设计人员指定用于现有web应用的各种重用元素。在该方法中,模型定义是非常重要的其不仅描述现有应用的可编程接口,而且帮助运行时引擎从网页提取数据片断(snippet)和重建数据对象。本发明的元模型包括以下主要构造热点(hot-point)元素、消息元素、页元素、页流元素和资格元素。热点元素定义网页中语义数据片断的提取准则。它通常包含一些提取逻辑。消息元素指定消息的内部结构,其将从热点数据片断构建。页元素描述外部资源伙伴,而页流元素定义页集合上的构成逻辑。资格元素满足非功能指定要求并且使服务有状态(statefol)。实际上,元模型提供了一种声明编程语言。根据该元模型,设计人员可使用声明方式指定所有重用逻辑,而不需要编写任何代码。图1图示了使用UML(统一建模语言)表示的本发明一实施例的元模型定义。如下所述,元模型可以基于XMLSchema进行严格定义<xmlversion-".0"encoding="UTF—8"><xs:schemaxmlns:xs-"http://www.w3.org/2001/XMLSchema"xmlns:soa="http://www.ibm,com/soa/service"targetNamespace-"http://www.ibm.com/soa/service"elementFormDefault="qualified"<xs:elementname-"service"type="soa:Service"/><xs:complexTypename="Service"><xsrsequeoce><xs:elementname-"inputMessageLinkName"type="xs:string"/〉<xs:elementname=,'outputMessageLinkNamentype-"xs:string"/><xs:elementnarae-"page"type-"soa:PageType"maxOccurs="unbounded"/><xs:elementnarae="linkntype-"soa:LinkType"maxOccurs="unbounded"/></xs:sequence><xs:attributename="serviceName"type="xs:string"use="required"/></xs:complexType><xs:complexTypename^"PageType"<xs:sequetice〉<xs:elementnatne="outputMessage"type="soa:OutputMessageType"maxOccurs-"unbounded"/><xs:elementname="inputMessage"type豕"soa:InputMessageType"minOccurs^"0"maxOccurs="unbounded"/></xs:sequence><xs:attributename-"pageMaffie"type-"xs:string"use-"reQiiired"/〉<xs:attributename=nURL"type^"xs:string"use='lrequiredn/><xs:attributename="maintainSession"type豕"xs:boolean"use=nrequiredn/〉<formula>formulaseeoriginaldocumentpage12</formula><xs:elementname="complexVariable"type="soa:ComplexVariable丁ype"minOccurs-"0maxOccurs="unbounded"/></xs:seQuence><xs:attributenamew"variableName"type="xs:string'7><xs:attributename-"selectPath"type-"xs:string'7><xs:attributename-"isArray"type-"xs:boolean"default="false'7></xs:complexType><xs:complexTypename-"SimpleVariableType"<xs:attributename-"variableName"type="xs:string"use-"required'7〉<xs:attributename豕"isArray"type=ttxs:boolean"default="false"/〉<xs:attributename="isDirectLink"type-"xs:boolean"default=nfalsen/><xs:attributename-nselectPath"type-"xs:string"use-"required"/〉<xs:attributename"variabieType"use="required"><xs:simpleType><xs:restrictionbase=llxs:string"><xs:enumerationvalue-"StringV><xs:enumerationvalue="Integer"/〉</xs:restriction></xs:simpleType></xs:aUribute></xs:complexType></xs:schema>元模型的主要元素筒述如下:元素名称元素说明Service描述和定义一个服务的基本信息PageType描述和定义用户交互过程中的一个页面LinkType描述和定义页面之间的流转,包括源页面的输出和目的页面的输入InputMessageType描述和定义某个特定页面的输入,一个页面可以有多个可能的输入消息定义OutputMessageType描述和定义某个特定页面的输出,一个页面可以有多个可能的输出消息定义SimpleVariableType描述和定义筒单形式的热点数据Comp1exVariab1eType描述和定义复杂形式的热点数据下面参照图1来说明根据本发明一实施例的元模型的细节。为了利用元模型来描述基于HTML的页面数据和流程,可将各种人机交互场景抽象成元模型的以下几种重要元素1.1服务(Service)的定义服务可作为元模型的根节点,它具有服务名称(ServiceName)、一个输入消息链接名称(inputMessageLinkName)和一个输出消息链接名称(outputMessageLinkName),它包含若干个页面(PageType)和链接(LinkType)元素,这代表了实现一个抽象的服务需要的几个基本要素。整个流程由输入消息链接进入,最终由输出消息链接输出结果。每个链接都定义了从一个页面到另外一个页面的流转,所以可以沿着定义的链接走完整个流程。如果执行引擎遇到一个页面有两个同时有效的链接,将选择先定义的那个链接执行。有效的链接指的是输出消息在执行引擎实际获得的页面中具有有效定义。1.2页面(PageType)的定义页面的定义主要描述一个页面有哪些输入消息(InputMessageType)、哪些输出消息(OutputMessageType)、访问它的URL是什么、以及一些安全和会话(未显示)设置。下表是图1中页面定义的主要属性的具体描述<table>tableseeoriginaldocumentpage14</column></row><table>单方认证的HTTPS协议。如果流程中的上个页面的输出消息是直接链接的形式,则这个URL属性将不起作用。具体参考输出消息部分的解释。userName,passWord用于对受保护的页面进行认证所需要的信息,通常执行引擎将使用服务使用者当前的安全身份对模型中的网页进行调用(目前只支持IBMWebSphere平台)。如果模型定义中有显式定义的用户名和密码,将使用这些显式定义来重新认证。1.3输入消息(InputMessageType)的定义对页面进行请求时,HTTP客户端经常需要使用GET/POST的方式而附带一些参数,可使用输入消息的定义来表示这些参数。消息的定义主要是要解决数据结构的问题,也就是所关心的数据到底是什么样的数据结构,具体解释可以参考输出消息中的相关部分。通过定义输入数据的数据结构,可将现有基于万维网的应用的输入数据表示为要转换的服务的输入参数。需要指出的是,输入消息一般都是流程中前一个页面的输出消息,所以消息的定义可以直接引用上个页面的输出消息的定义,可用useOutput属性来表示。流程中的第一个页面的输入消息是整个服务的输入参数。1.4输出消息(OutputMessageType)的定义输出消息的定义主要定义在一个页面中所关心的输出数据,一个页面可能会有多种场景,基于输出数据进行的链接定位也就不同,所以可以定义多个输出消息,执行引擎会选择第一个找到的输出消息并用它定位相应的链接去继续整个流程。流程中的最后一个页面的输出消息是整个服务的输出结果。消息的数据结构采用类似JavaBean的方式,用复杂变量类型(ComplexVariableType)代表消息的数据结构。复杂变量类型既可以包含简单变量类型(SimpleVariableType)也可以嵌套复杂变量类型,这样的定义在转换成服务接口(Java形式)的时候更容易映射。同时,为了支持数组变量类型的数据,引入了isArray属性来表明此数据是否为数组。页面的输出数据的链接定位也是消息定义中重要的部分,使用类似XPath的语法来在HTML页面中定位所关心的数据,并且用变量的定义中的"selectPath"属性来存储路径值。举例来说,'7BODY/TABLE/TR[l]/TD/"路径值表示在HTML根元素BODY下第一个Table元素中、第二个TR元素中的第一个TD元素。因为HTML本身就是层次结构的,直接使用HTML中的Tag(标签)作为路径选择标准。再比如下面的更复杂一些的例子<pageactionType="GET"ma^nt^nSession-"加e"pageName="'QueryPage',URL="http:〃w3.ibHi.com.......">〈outputMess鄉iness^eNaiie=1,I^[IDMessage',>〈complexVariableselectPath-"bo4y/div據id-'cont節t^(Jiv[敏iK9pteirt-inaiii']/威e/fr/td微div[争lass-,rep(at-to-chain']/div[@dass=,level-2^span"vai£*teNake-"String'">variableType-"xs:strii^"isDJred她-"true"》々coinplexViariabie></outputMess^ge>、〈inputMessagemessageName,"QueryEniployee"useOutput="felse"><complexVariableselecflafli-""varial)kJName-',empk)yeeName"〉〈simpleVariaWeseiectPath-1"'variabteName="searchForMvariableType^,string"^</complexVari《We></inputMqssage></page>这个例子中显示了路径定义的几个规则A.如果父变量有多个相同类型的子变量,可以使用类似数组下标的方式来定义其每个子元素,也可以使用属性来定位其中的某个元素,比如"body/div[@id='content']/..."。B.子变量的路径缺省是相对于父变量的路径的,比如"sdectPath="a/@href'"。如果子变量路径以"/"开头,则表示是从4降径开始的绝对路径。这样的定义可以更方便地组合页面中的各种元素来构成复杂类型变量。C.如果简单变量类型定义中含有一个超级链接或者一个Submit类型的按钮,可以令"isDirectLink"属性为"true"来让执行引擎使用这个链接所对应的URL,而忽略目标页面定义中的URL属性。这个时候,变量定义中的其它元素将作为目标页面的输入消息。如果不设置这个属性,将视属性值为普通字符串。一个输出消息的定义中只能包含一个isDirectLink为true的简单变量。需要指出的是,开发者在实际开发的时候并不需要花很多时间设置路径变量,因为它的规则性,可以借助图形工具让开发者对照相应的页面选择所关心的数据点,然后工具可以自动生成这个热点数据所对应的选择路径定义。1.5页面链接(LinkType)的定义页面链接的定义比较直观,主要用于确定页面流转的流程,包括源页面的名称(fromPageName)、目的页面的名称(toPageName)、源页面的输出消息名称(outputMessageName)以及目的页面输入消息的名称(inputMessageName),这可以提供足够的信息让执行引擎沿着页面链接一直进行下去。初始输入的页面链接名称在输入消息链接名称(inputMessageLinkName)定义中指明。图2图示了在根据本发明的一实施例中利用元模型将现有基于HTML的页面数据和流程转化为服务的方法的框架图。本发明的方法分为4步。第一步是分析现有应用,其通常包含成百的网页,需要识别哪些页将用于服务,并且重建页面流程的结构。第二步是定义集成模型,这是本发明的方法的核心。该模型不仅包含功能指定,如输入消息和输出消息等,而且包括非功能指定信息,如会话处理、异常处理等。第三步是转换模型到服务实现。该步骤中的主要任务是根据模型化模块(modelingartifacts)构建可访问的接口和模型定义文件(如XML文件)、以及服务的描述文档(WSDL),并且产生相应类型的服务实现,以将现有web功能表现为服务。最后一步是部署转换模块(transformationartifacts)到运行时环境并且测试产生的服务。此后,服务准备好工作,而不需要其它代码。更具体地,使用本发明的方法来构造服务的典型流程如下1)为了实现某种业务功能,需要分析现有的页面结构中的哪些关键页面和相应的关键数据,通过怎样的页面流程来最终获得所需要的输出。2)基于第一步的分析结果,定义实现上述业务功能的服务所需要的访问模型实例。该步可使用图形化的工具来完成,主要包括a)定义服务名称,整个流程的起始页面链接和最终页面链接。b)为页面流程中的各个页面定义输入和输出,前一个页面的输出就是后一个页面的输入,整个流程的第一个页面的输入也就是整个服务的输入,最后一个页面的输出就是整个服务的输出。值得注意的是,因为4^莫型用来定位热点数据(即对于用户具有明确业务含义的数据)是基于类似XPath形式的规范表达式,计算机可以根据用户的选择自动产生,在定义的时候开发者可以通过图形化界面工具方便的选(点)取,不需要自己手写定位表达式,这样就大大方便了模型定义的工作量。c)定义一些页面细节,比如页面的名称、页面的URL(统一资源定位符)、安全属性、会话属性等,这些都是筒单属性,开发者可方便地自行定义。d)定义页面之间的流转。这里主要通过链接(LinkType)来定义源页面的哪个输出消息和目的页面的哪个输入消息相链接,从而模拟人机交互中页面流转的过程。如果有多个链接同时链接两个页面,则在实际执行过程中,存在的第一个匹配的源页面输出消息所对应的链接将起作用。3)模型定义好以后,就可以将模型转换为服务实现,可以通过图形化界面工具直接产生相应的服务包装代码和最后的部署单元。服务的描述文件(WSDL)也可以自动产生。需要指出的是,本发明人基于本发明的元模型,开发了一个模型执行引擎来实现上述模型到服务实现的转换,所以代码的产生主要成为对数据结构的归整和接口的语言级别的定义,其核心是利用模型执行引擎根据输入的模型文件模拟页面流转,获得相应的输出。开发者甚至可以直接手写模型文件然后调用模型执行引擎来获得相应的服务输出结果。这也体现了本发明构造服务的方法的灵活性元模型本身可以不断进化和扩展,只要通过更新执行引擎并保持兼容性,元模型的描述能力将越来越强,可以处理的场景也会越来越多。4)使用产生的部署单元将服务包装代码和模型定义文件部署到运行时环境中,就可以使用如图3所示的执行流程实现需要的服务。图2中有关执行引擎及其与其它部分的联系将在下面详细说明。图3图示了根据本发明一实施例的面向服务的系统的结构示意图及其执行流程,以便实现需要的服务。如图3所示,用户在服务入口21发起服务请求,由服务包装代码22接收带服务参数的服务请求,进行从服务参数到入口消息的转换,将入口消息发送给执行引擎23。执行引擎23装载相应的模型定义文件24,与实际的页面(例如各种网站中的页面)25进行交互,完成用户需要的服务并且返回结果。执行引擎23的工作流程将在后面详细说明。通过使用本发明的元模型和构造服务的方法,在可视化的图形界面的帮助下,开发者可以方便地构造新的服务。其主要优势在于1)不需要分析现有web应用的内部结构和代码,直接从表示层入手,提取关键数据直接明了;2)开发人员工作量比较低,借助工具的帮助,定义服务只需要在图形界面上做一些选择和输入;3)元模型和转换框架(执行引擎)灵活性比较好,易于扩展和补充而不失简洁性。本发明提供了一种运行时的执行引擎,用于实现从万维网页面到可复用服务的自动转换。该执行引擎的主要功能包括首先,实现服务请求数据格式与万维网数据格式的透明转换,屏蔽数据表示结构的异构性。服务的入口请求一般面向对象的数据表示结构,它根据模型实例中初始输入消息自动生成的包装代码来定义,中间页面的请求由模型实例中的输入消息来定义,数据内容只包含对于用户有意义的业务信息,需要转化成符合HTTP规范的请求数据(GET/POST)。同时,执行引擎还实现服务请求中的异常处理、会话控制和单点登陆等功能,提高交互过程的服务质量,执行引擎为以上功能提供了内置的支持,从而使得开发人员能够更方便地构建整个复用方案。图4图示了根据本发明一实施例的执行引擎的结构及其基本工作流程。执行引擎23将开发人员设计的模型实例作为整个复用过程的基础,自动执行数据转换和协议转换操作。如图4所示,从运行时来看,执行引擎23在接收到用户请求时,首先按照服务请求装载相应的模型定义文件,然后根据模型文件中的模型定义向外部服务器发出服务请求。在获^目关网页后,执行引擎23按照模型定义从网页所包含的标签树中定位并解析相关业务数据块,最后将数据块组装成为对于用户具有明确业务含义的信息。整个执行过程全部由执行引擎自动执行,而不需要任何人工千预。开发人员所需要提供的只是在设计阶段定义模型实例,而无须考虑过多执行层面的细节。这种模型驱动的开发复用方法极大减少了开发人员的工作量,并且保证了系统质量。如图4所示,执行引擎23主要包含如下构件协议适配器45、数据格式转换器44、数据组装器43、截取器。下面参照图3和图4说明根据本发明一实施例的系统的工作流程。协议适配器45的主要功能是完成服务请求协议与万维网通讯协议的透明转换,该转换过程可以分为两个步骤服务请求消息转换与服务应答消息转换。当用户M户端41发送服务请求时,其调用对象实际是从开发人员定义的模型中自动生成的服务包装代码22。该服务包装代码22为客户提供了应用特定的编程接口,从而简化了程序调用;而且该服务包装代码22在部署到运行时环境中以后,成为集成现有基于万维网的应用而被包装的服务与用户之间的服务代理接口42。服务代理接口42收到用户调用请求后,首先将该请求所包含的输入数据集合转化为执行引擎23可识别(换句话说,所请求的服务可识别)的通用参数。协议适配器45根据相应的模型定义文件24,将用户对于服务的操作调用映射为特定的网络资源调用流程,这是例如外部网站可识别的调用请求,比如将用户对于服务的操作调用映射为特定的网络资源地址(例如URL),并且在请求地址后附加相关的调用参数。参数定制使得执行引擎不仅能够调用万维网上的静态页面,而且能够访问所有动态生成的页面,如使用ASP、JSP或是PHP等脚本语言编写的页面等。在完成以上工作后,服务代理接口42将控制权转交给协议适配器45。协议适配器45开始与外部网站(如WWW资源49)建立交互连接,发送网页抓取请求并等待回应。在接收到外部网站的服务应答后,协议适配器45继续执行其处理逻辑。通常而言,外部网站返回的内容基于超链接文本传输协议(HTTP/HTTPS)的字符串,协议适配器45首先将该字符串保存至内存,然后按照传输协议头的内容决定下一步处理。如果传输协议头的内容表明正常返回外部信息,则协议适配器45从获得的外部信息去除有关传输协议的协议部分,将所述外部信息转换为对于用户具有业务含义的数据部分,然后将控制权交给数据格式转换器43;如果存在异常,如网页不可用或是主机无法到达时,协议适配器45跨过数据格式转换器43的格式转换处理,将控制权交由异常截取器46进行下一步的处理操作。数据格式转换器43的主要功能是屏蔽数据表示格式的不一致性,从网页中提取出对于用户具有明确业务含义的信息。执行引擎通过协议适配器45所抓取的网页通常使用标签语言(如HTML)来描述,而标签语言一个重要的特点是在同一个文档中混合了业务数据与视图数据,该特点非常有利于浏览器为用户提供丰富的显示效果,但是却为网页复用带来了麻烦。基于该认识,本发明使用XPath语法标示业务数据在文档中的位置。从网页标签的结构来看,每一个文档所包含的标签都构成了一棵树,开发人员可以使用XPath语法精确定位业务数据在文档中的位置。数据格式转换器43根据该XPath语法遍历文档所包含的标签树,并从中定位并提取所需要的信息,即与用户的服务请求有关的数据。在完成数据提取工作后,数据格式转换器43将提取出来的数据交给数据组装器44进行进一步的处理。数据组装器44按照开发人员设计的模型定义文件中的输出消息定义,将从网页中*]^的零散数据组装成为具有明确业务含义的数据集合,最后通过服务代理接口42返回给用户(经由客户端41)。在整个交互过程中,执行引擎还必须处理用户的安全认证和异常处理等问题,这些功能由安全截取器48、异常截取器46和会话截取器47提供。安全截取器48主要解决用户的安全认证问题。在用户发送服务请求时,执行引擎的安全截取器48首先通过服务代理接口42从客户端41提供的用户输入解析当前用户的安全标识,然后传递给协议适配器45,用于在进行相应的页面调用时传递此安全标识。如果^^型实例定义中相应目标页面有显式的安全标识定义,则使用此显式的安全标识定义重新进行目标页面的安全认证。作为例子,执行引擎集成了IBMWebSphere平台的安全标识传递的支持。异常截取器46用于截取服务请求过程中出现的异常问题。当协议适配器45在与外部进行交互的过程中出现异常时,异常截取器46从协议适配器45自外部资源获得的信息截取异常问题。在集成现有万维网应用时,出现的异常问题类型大致有两种。首先是运行环境的问题,如主机不可达到或是网页不可用等,这些问题在网络连接协议的状态返回字中有明确表示。在这种情况下,异常截取器46会根据实际情况给出运行时异常,并在运行时异常中保存详细信息。其次是应用程序执行出现异常的问题,如程序执行失败等。此时异常截取器46会按照开发人员的设定,分析异常页面,从中提取异常信息。因为此种异常情况是由相应页面来体现的,所以可以给予相应的定义。最后,异常截取器46将异常信息经由服务代理接口42和客户端41返回给用户。异常截取器为执行引擎提供了稳定运行的基础,它保证了能够及时有效地向用户提供出错消息提示。会话截取器47截取和记录用户在通过服务代理接口42与执行引擎23交互过程中的状态信息。通常而言,当前绝大多数的万维网网站都支持持久保存客户的访问信息,如用户偏好或是所购物品等,所使用的技术一般是客户端的Cookie。本发明所提供的执行引擎使用^^舌截取器47充当临时的Cookie库,要经由客户端41返回给用户的状态信息全部由会话截取器47拦截并加以保存。当用户下次发出服务请求时,会话截取器47将会根据用户标识自动将相关状态信息附加在服务请求中发出,从而保证用户相对外部网站的状态一致性,而且还使执行引擎提供的服务是有状态的(stateflil)。下面将以DeveloperWorks技术网站为例并且参照图3和图4说明根据本发明的一实施例的实际实现。首先基于本发明的元模型设计(定义)该技术网站的服务模型实例,这可以使用图形化工具来定义。然后自动生成图3中的服务包装代码22,从而使得其他系统能够直接调用该网络服务。执行起点是用户在图3中的服务入口21发起一个服务请求,请求的形式通常是基于对服务包装代码22提供的函数的调用。例如用户指定调用的方法名称为文章搜索,并将文章名称作为输入参数传入。服务代理接口42(服务包装代码22)接收到请求后,装载模型定义文件,传递给协议适配器45处理。协议适配器45首先构造网络请求。在文章搜索的场景下,所构造的网络请求是HTTP请求,请求地址是http:〃www陽128.ibm.com/developerworks/cn/search.jsp,纟术后协i义适酉己器45向外部网站发出HTTP请求。如果外部网站搜索文章成功,协议适配器45将会接收到一个基于HTML的文档,其中列出了所有与该输入的文章名称相匹配的文章,包括名称、作者、摘要和发表时间等。数据格式转换器44开始按照XPath语法遍历返回文档的标签树,定位所需要的信息,如selectPath-一个body标签,然后选择子标签下的第二个table标签等,最后将结果汇集发送给数据组装器43。数据组装器43将获得的结果构造成用户希望看到的文章列表之类的数据对象,然后通过服务代理接口42返回客户端41呈现给用户,从而完成整个调用过程。权利要求1.一种面向服务的系统,用于集成现有基于万维网的应用而形成为用户提供的服务,该系统包括服务入口,用于接收用户提交的包含输入数据集合的服务请求;服务代理接口,通过集成现有基于万维网的应用而形成,用于将用户提交的服务请求中的输入数据集合转换为所请求的服务可识别的输入参数,并且根据用户提交的服务请求装载对应于所述服务的模型定义文件,该模型定义文件通过集成现有基于万维网的应用而形成;以及执行引擎,根据服务代理接口转换的输入参数与外部资源进行交互,并且将从外部资源获得的信息返回服务代理接口。2.根据权利要求1所述的面向服务的系统,所述执行引擎包括协议适配器,用于进行服务请求消息转换与服务应答消息转换,其中,服务请求消息转换包括根据装载的模型定义文件,将请求的对于服务的操作调用映射为特定的网络资源调用流程;服务应答消息转换包括去除从外部资源获得的信息中有关传输协议的协议部分,将所述信息转换为对于用户具有业务含义的数据部分。3.根据权利要求2所述的面向服务的系统,所述执行引擎还包括数据格式转换器和数据组装器,其中,数据格式转换器屏蔽数据表示格式的不一致性,从所述数据部分提取与用户的服务请求有关的数据;而数据组装器按照模型定义文件中的输出消息定义,将数据格式转换器提取的数据组装成为对于用户具有明确业务含义的数据集合,以便通过服务代理接口返回给用户。4.根据权利要求l所述的面向服务的系统,所述执行引擎还包括安全截取器,用于从服务代理接口转换的输入参数解析当前用户的安全标识,用于在进行相应的页面调用时传递此安全标识。5.根据权利要求4所述的面向服务的系统,其中,如果模型定义文件中对相应目标页面有显式的安全标识定义,则^f吏用此显式的安全标识定义重新进行目标页面的安全认证。6.根据权利要求l所述的面向服务的系统,所述执行引擎还包括异常截取器,用于截取与外部资源进行交互的过程中出现的异常。7.根据权利要求1所述的面向服务的系统,所述执行引擎还包括会话截取器,用于截取和记录用户在与执行引擎交互过程中的状态信息,当用户下次发出服务请求时,会话截取器根据用户标识自动将相关状态信息附加在服务请求中发出,从而保证用户相对外部资源的状态一致性。8.根据权利要求1所述的面向服务的系统,所述服务代理接口的形成包括使用元模型对现有基于万维网的应用进行模型定义,通过图形化界面工具将模型定义转换为服务包装代码和最后的部署单元,将服务包装代码部署到运行时环境中,从而形成服务代理接口。9.根据权利要求8所述的面向服务的系统,集成现有基于万维网的应用所使用的元模型包括以下至少一个服务定义,作为元才莫型的根节点,具有服务名称、一个输入消息链接名称和一个输出消息链接名称,它包含若干个页面和链接元素;页面定义,用于描述该页面包含的输入消息、输出消息、访问它的URL、以及安全和会话设置;输入消息定义,用于定义输入数据的数据结构,以便将现有基于万维网的应用的输入数据表示为要转换的服务的输入参数;至少一个输出消息定义,用于定义对于用户具有明确业务含义的输出数据的数据结构;以及页面链接定义,用于确定页面流转的流程,包括源页面的名称、目的页面的名称、源页面的输出消息名称以及目的页面输入消息的名称,以使执行引擎沿着页面链接一直进行下去。10.根据权利要求9所述的面向服务的系统,其中,输入消息定义和输出消息定义还包括筒单变量类型定义和复杂变量类型定义,其采用类似JavaBean的方式,其中,复杂变量类型包含简单变量类型,或者嵌套复杂变量类型。11.根据权利要求9所述的面向服务的系统,其中,使用类似XPath的语法在HTML页面中定位与用户的服务请求有关的数据。12.—种为用户提供服务的方法,所述服务通过集成现有基于万维网的应用而形成,所述方法包括提供服务入口;在服务入口接收由用户提交的包含输入数据集合的服务请求;将用户提交的服务请求中的输入数据集合转换为所请求的服务可识别的输入参数,并且根据用户提交的服务请求装载对应于所述服务的模型定义文件,该模型定义文件通过集成现有基于万维网的应用而形成;以及根据转换的输入参数与外部资源进行交互,并且将从外部资源获得的信息返回用户。13.根据权利要求12所述的方法,其中与外部资源进行交互包括进行服务请求消息转换与服务应答消息转换,其中,服务请求消息转换包括根据装载的模型定义文件,将请求的对于服务的才喿作调用映射为特定的网络资源调用流程;服务应答消息转换包括去除从外部资源获得的信息中有关传输协议的协议部分,将所述信息转换为对于用户具有业务含义的数据部分。14.根据权利要求13所述的方法,还包括屏蔽数据表示格式的不一致性,从所述数据部分提取与用户的服务请求有关的数据;以及按照模型定义文件中的输出消息定义,将提取的与用户的服务请求有关的数据组装成为对于用户具有明确业务含义的数据集合从所述数据部分提取与用户的服务请求有关的数据;而数据组装器按照模型定义文件中的输出消息定义,将数据格式转换器提取的数据组装成为对于用户具有明确业务含义的数据集合,以便返回给用户。15.根据权利要求12所述的方法,还包括从转换的服务可识别的输入参数解析当前用户的安全标识,用于在进行相应的页面调用时传递此安全标识。16.根据权利要求15所述的方法,其中,如果模型定义文件中对相应目标页面有显式的安全标识定义,则使用此显式的安全标识定义重新进行目标页面的安全认j正。17.根据权利要求12所述的方法,还包括截取与外部资源进行交互的过程中出现的异常。18.根据权利要求12所述的方法,还包括截取和记录用户在与执行引擎交互过程中的状态信息,当用户下次发出服务请求时,根据用户标识自动将相关状态信息附加在服务请求中发出,从而保证用户相对外部资源的状态一致性。19.根据权利要求12所述的方法,通过集成现有基于万维网的应用形成所述服务包括使用元模型对现有基于万维网的应用进行模型定义,通过图形化界面工具将模型定义转换为服务包装代码和最后的部署单元,并且将服务包装代码部署到运行时环境中。20.根据权利要求19所述的方法,集成现有基于万维网的应用所使用的元模型包括以下至少一个服务定义,作为元模型的根节点,具有服务名称、一个输入消息链接名称和一个输出消息链接名称,它包含若干个页面和链接元素;页面定义,用于描述该页面包含的输入消息、输出消息、访问它的URL、以及安全和会话设置;输入消息定义,用于定义输入数据的数据结构,以便将现有基于万维网的应用的输入数据表示为要转换的服务的输入参数;至少一个输出消息定义,用于定义对于用户具有明确业务含义的输出数据的数椐结构;以及页面链接定义,用于确定页面流转的流程,包括源页面的名称、目的页面的名称、源页面的输出消息名称以及目的页面输入消息的名称,以便沿着页面链接能够一直进行下去。21.根据权利要求20所述的方法,其中,输入消息定义和输出消息定义还包括简单变量类型定义和复杂变量类型定义,其采用类似JavaBean的方式,其中,复杂变量类型包含简单变量类型,或者嵌套复杂变量类型。22.根据权利要求20所述的方法,其中,使用类似XPath的语法在HTML页面中定位与用户的服务请求有关的数据。23.—种将现有基于万维网的应用集成为服务的方法,包括以下步骤提供元模型;根据元模型对现有基于万维网的应用进行服务模型定义;将形成的服务模型转换为服务包装代码和服务的模型定义文件;将服务包装代码进行部署,从而在运行时环境中产生服务代理接口,以便由服务的客户端调用。24.根据权利要求23所述的方法,所述元模型包括以下至少一个服务定义,作为元模型的根节点,具有服务名称、一个输入消息链接名称和一个输出消息链接名称,它包含若干个页面和链接元素;页面定义,用于描述该页面包含的输入消息、输出消息、访问它的URL、以及安全和会话设置;输入消息定义,用于定义输入数据的数据结构,以便将现有基于万维网的应用的输入数据表示为要转换的服务的输入参数;至少一个输出消息定义,用于定义对于用户具有明确业务含义的输出数据的数据结构;以及页面链接定义,用于确定页面流转的流程,包括源页面的名称、目的页面的名称、源页面的输出消息名称以及目的页面输入消息的名称,以便沿着页面链接能够一直进行下去。25.根据权利要求24所述的方法,其中,输入消息定义和输出消息定义还包括:简单变量类型定义和复杂变量类型定义,其采用类似JavaBean的方式,其中,复杂变量类型包含筒单变量类型,或者嵌套复杂变量类型。26.根据权利要求25所述的方法,其中,使用类似XPath的语法在HTML页面中定位与用户的服务请求有关的数据。27.根据权利要求23所述的方法,还包括提供执行引擎,用于通过服务代理接口根据运行时装载的服务模型定义文件执行用户请求的服务。全文摘要本发明提供一种将现有基于万维网的应用的集成为服务的方法和使用该方法形成的面向服务的系统,还提供一种为用户提供服务的方法。该面向服务的系统包括服务入口,用于接收用户提交的包含输入数据集合的服务请求;服务代理接口,通过集成现有基于万维网的应用而形成,用于将用户提交的服务请求中的输入数据集合转换为所请求的服务可识别的输入参数,并且根据用户提交的服务请求装载对应于所述服务的模型定义文件,该模型定义文件通过集成现有基于万维网的应用而形成;以及执行引擎,根据服务代理接口转换的输入参数与外部资源进行交互,并且将从外部资源获得的信息返回服务代理接口。文档编号H04L29/06GK101127655SQ20061011556公开日2008年2月20日申请日期2006年8月18日优先权日2006年8月18日发明者周志荣,毛新生,佳谭申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1