背景技术
计算机系统和相关技术影响着社会的许多方面。实际上,计算机系统处理信息的能力已经改变了人们生活和工作的方式。计算机系统现在通常执行在计算机系统的出现之前手动执行的大量任务(例如,文字处理、调度、数据库管理等)。近来,计算机系统被彼此耦合以形成计算机网络,通过计算机网络,计算机系统可电子地通信以共享数据。web服务已成为了推进计算机系统之间的这一通信的驱动力,且正在彻底转变人们构建和使用软件的方式。
web服务让应用程序能够共享数据,且更强有力地调用来自其它应用程序的能力而无需关注这些应用程序是如何构建的、它们运行在什么操作系统或平台上、以及使用什么设备来访问它们。web服务是通过包括SOAP(简单开放访问协议)、XML(可扩展标记语言)、UDDI(通用描述发现集成)、WSDL(web服务描述语言)等行业标准协议在因特网上调用的。尽管web服务保持彼此独立,但是它们可将其自身松散地耦合到执行特定任务的协作组中。
通常,web服务网络上的电子通信包括请求对服务器计算机系统(后文称为“服务器”、“服务”或“web服务”)处的网络服务(例如,web服务)的访问的客户机计算机系统(后文称为“客户机”)。因此,客户机向服务发送对其系统资源的特定访问的请求,其中,如果客户机被授权和确认,则服务用提供期望信息的响应消息来响应。当然,客户机和服务之间的其它消息通信模式是可用的,且包括简单的单消息以及更复杂的多消息交换,如通知、请求—响应、发布—订阅模式、轮询、踢—推(kick-push)、排队以及其它。此外,这些类型的通信是由客户机和服务在用于分布式系统(例如,web服务)的契约中定义的各种要求和能力来支配的。
契约是服务(或客户机)行为的可见方面的表达。契约是由机器可读和人类语言的混合来表示的。除显然的机会可能有额外的精确度之外,机器可读语言使得能用工具构造部分服务实现、自动化服务部署、监察/确认所交换的消息、管理服务、以及启用大量其它的网络相关功能。然而,由于机器可读语言的表达能力的局限,人类可读语言仍是契约的一个重要组成部分,它主要用于描述消息和消息交换模式语义。
网络协议描述语言(例如,WSDL)提供了用于以公共或标准语言描述契约(例如,web服务契约)的总体包装或规范。这一规范使得开发者和开发者工具易于创建和解释契约。这些网络协议描述语言(后文称为“NPDL”)具有广泛的工具套件,这很大一部分考虑到其普及性。
在web服务的出现之前,多年以来,大量分布式应用程序是使用来自各销售商的基于传统组件的体系结构(例如,COM(组件对象模型)、DCOM(分布式组件对象模型)、CORBA(公共对象请求代理体系结构))来编写的。然而,随着基于标准的web服务的到来和前进,所关注的是将来自传统组件的业务逻辑展示为web服务。作为一个实例,且不管后续的方法是什么,意图通常是采用诸如支持以下接口的应用程序组件:
Interface IStockSystem:IDispatch{
HRESULT GetProductDescription(
[in]BSTR ProductID,
[out,retval]BSTR*ProdDesc);
HRESULT GetProductInventory(
[in]BSTR ProductID,
[out,retval]short*ProdCount);
};
并且从该组件定义中产生具有在以下列WSDL片段示出的若干操作的对应的web服务层:
<wsdl:portType name=“StockSystem”>
<wsdl:operation name=“GetProductDescription”>
<wsdl:input message=“tns:GetProductDescriptionIn”/>
<wsdl:output message=“tns:GetProductDescriptionOut”/>
</wsdl:operation>
<wsdl:operation name=“GetProductInventory”>
<wsdl:input message=“tns:GetProductInventoryIn”/>
<wsdl:output message=“tns:GetProductInventoryOut”/>
</wsdl:operation>
</wsdl:portType>
至今为止,仅遵循了几个主要模式或方法以在web服务环境内转换或使用传统组件。一种方法是迁移或修改,这要求开发者修改组件源代码以添加web服务支持。当编译和执行应用程序时,应用程序将以适当的web服务支持启动,而仍允许传统客户机连接到底层应用程序。
另一方法是工具安装和元数据驱动方法,这产生静态包装服务。并非要求组件源代码修改,而是该方法使用了一种更外部的方法来检查组件的现有的已注册元数据来确定该组件应当提供的服务。这产生了对底层的未修改组件外部的,但至少最初与其相一致的静态web服务包装。
尽管上述修改和静态方法使得传统组件的业务逻辑能够在web服务环境中访问,然而仍存在与这两个方法相关联的若干缺点和问题。例如,由于修改方法要求源代码修改,即使在不需要改变业务逻辑时也是如此,因此这是一项开发任务而非简单的管理过程。因此,这一任务超出了传统管理员角色的范围,且要求附加的技能组。另外,使用原始的编码环境可能无法使启用web服务的开发修改可供使用。例如,在修改使用不再支持的传统语言编写的组件的情况下,该组件首先必须移植到当前语言。因此,最初看上去像向方法添加属性的修改实际上是迁移到不同的语言、运行库和开发环境。
在静态工具安装方法中,当修改底层组件或部署新版本时存在问题。在这一情况下,在重新生成包装服务之前,改变不会自动在该服务中得到反映。另外,对于web服务操作,在服务和底层组件之间存在明确的依赖性。因此,必须小心地确保组件的生存期和web服务是同步的(即,包装服务要求组件是活动的,且组件要求包装是活动的)。此外,取决于包装的环境和外部特性,通常存在要部署和管理的一个附加组件。换言之,如果组件被移至另一机器,则也必须相应地标识和移动包装组件。
至少为以上原因,需要提供一种用于传统组件的web服务和业务逻辑,而无需开发者修改底层组件源代码,从而允许组件修改或版本确定,以及支持服务和底层组件之间明确的依赖性。
具体实施方式
本发明提供了用于为不被开发成在web服务环境内通信的传统应用程序组件生成动态web服务的方法、系统和计算机程序产品。本发明的实施例可包括包含如下更详细讨论的各种计算机硬件组件或模块的专用或通用计算机。
本发明提供了一种允许管理事件在传统应用程序组件的初始化期间触发或导致动态web服务的生成的机制。类似于其它静态工具安装方法,如此处所支持的动态方法使用了描述用于与传统组件通信的接口的可用元数据。并非在一次性或偶 然的基础上通过工具安装来生成和表现web服务,而是在示例性实施例中,由作为应用程序初始化的一个标准部件的支持基础结构来生成web服务。在停止应用程序之后,提供停止对应的动态web服务并删除用于生成该动态web服务的web服务描述的终止序列。因此,每次当启动应用程序时,需要参考可用的元数据,并且将在进行中构建一致的服务。
用于生成web服务的动态方法具有优于现有技术系统的若干优点。例如,由于对原始的组件没有任何修改,因此该动态方法通过管理操作启用web服务。该管理操作可以是在启动应用程序之后即启用web服务的简单配置实用程序。通过允许基于配置设置来生成web服务,管理员可促使动态web服务的创建,而不需要较高的开发者技能组。此外,由于不需要任何代码级迁移工作,因此用于传统组件的支持基础结构允许它保留在对应的传统语言中。
另外,依照示例实施例所描述的动态方法具有优于静态工具安装方法的以下优点。首先,不管何时修改底层组件或开发新版本,将总是产生与组件定义相一致的web服务。因此,不与web服务同步的组件将不再有运行的机会。另外,服务的生存期可被容易地紧密耦合到传统组件的生存期,因为动态web服务启动(和生成)现在是组件启动的一部分。另一优点是,没有附加的包装组件要部署和管理。这是由于这样的事实,如下文更详细描述的,当应用程序不再运行时,没有服务的表现。因此,将按需生成动态web服务,使得可保证它总是在适当的位置。换言之,当在机器之间转移时,无需对web服务组件和传统组件进行变换。
图1示出了如上所述的各种示例性实施例。如图所示,提供了支持web服务客户机145和传统客户机105两者的分布式系统100,由此允许对面向服务110的应用程序125进行访问。更具体地,向服务110提供了包括传统组件135的应用程序125。示例实施例允许管理员(未示出)设置管理配置设置155,它指示了应当在启动应用程序125之后即生成动态web服务175。因此,基于管理配置设置155,在应用程序125启动之后(以及可能服从从应用程序专用配置文件中拉出的其它配置),web服务初始化器180将访问来自目录数据库165的元数据160。注意,示例实施例允许用于应用程序125(以及对应的动态web服务175)的初始化的若干种方式。例如,对应用程序125的初始化的请求可通过来自管理员用户界面的输入来接收。在其它示例实施例中,在接收到对访问由应用程序125提供的服务的请求140(或其它类似类型的请求)之后即自动初始化应用程序125。当然,初始化应用程序125的其它公知的方式也可用于本发明。因此,用于初始化应用程序125 的任何具体方式或过程仅用于说明性目的,并不意味着限制或缩小本发明的范围,除非明确地要求保护。
无论应用程序125是如何初始化的,如上所述,在初始化之后,即访问描述组件接口160的元数据。该元数据160是关于动态web服务175要如何与传统组件135通信的信息。换言之,元数据160特别地指示了以下的一个或多个:传统组件135需要什么调用115;要将什么参数115传递给传统组件135;应当以什么顺序传入参数115;以及消息交换模式,它指示,例如是否要从传统组件135接收返回值120。注意,所有的调用都包括参数。例如,FormatAllAvailableDisks()(格式化所有可用的磁盘)操作和其它调用不需要任何参数。因此,元数据160可以有或没有关于要传递到传统组件135的参数115的细节,这当然取决于要作出的调用的类型。
在任何情况下,在访问元数据160之后,web服务初始化器180即可生成web服务描述150或契约(例如,WSDL文档)。另外,web服务初始化器180将在运行时期间使用web服务描述150来启动动态web服务175。另外,可能有必要使用web服务描述150来创建与其相一致的web服务客户机145。注意,尽管所生成的web服务描述150用于创建动态web服务175,这一事件对于本发明并不是重要的。换言之,web服务初始化器180在访问了元数据160之后,即可自动生成动态web服务175,而无需使用web服务描述150。因此,使用web服务描述150来生成动态web服务175仅用于说明性的目的,并不意味着限制或缩小本发明的范围,除非明确地要求保护。
一旦创建了动态web服务175且传统组件135是活动的,则web服务客户机145可作出对访问由传统组件135提供的服务的请求140。请求140可包括诸如用于请求由传统组件135提供的服务的操作,和/或传统组件135需要的参数115(如果有)之类的内容。在接收到请求140之后,且基于该请求内的操作,动态web服务175检查请求140的内容并用适当的参数(如果有)向传统组件135作出适当的调用115。换言之,动态web服务175担当公共web服务请求消息140(例如,XML文档)和用于与传统组件135通信的适当调用和所需参数115(如果有)之间的转换器。
如上所述,除适当的调用和所需的参数115(如果有)之外,动态web服务175应当被配置成知道用于传统组件135的适当消息交换模式。因此,如果需要返回值120,则动态web服务175期望这一返回。该返回值120然后可在适当的web 服务响应130中被格式化,该响应是由动态web服务175生成的。注意,尽管用于该示例的消息交换模式是请求—响应,但是其它消息交换模式也可用于本发明。因此,如此处所描述的对任何特定类型的消息交换模式的使用仅用于说明性目的,并不意味着限制或缩小本发明的范围,除非明确地要求保护。
其它示例实施例为应用程序125提供了终止序列。当传统应用程序125被关闭或停止时,示例性实施例能够终止动态web服务175,并例如通过将其发送到回收站170来删除web服务描述150。因此,由于web服务描述150不被持久保存和/或重用,如果修改了传统组件175或提供了更新的版本,则不会有任何不一致性。
注意,本发明也支持传统客户机105。因此,传统客户机105可用适当的参数115(如果有)直接向传统应用程序125作出适当的调用。返回值120(如果有)也可从传统应用程序125直接传递到传统客户机105。
本发明也可按照包括功能步骤和/或非功能动作的方法来描述。以下是可在实施本发明时执行的动作和步骤的描述。通常,功能步骤按照所实现的结果来描述本发明,而非功能动作描述了用于实现特定结果的更具体的行动。尽管可以安特定的顺序描述或要求保护功能步骤或非功能动作,然而本发明不限于任何特定的顺序或动作和/或步骤的组合。此外,在权利要求书的叙述以及以下图2的流程图的描述中对步骤和/或动作的使用用于指示对这些术语的期望的特定使用。
图2示出了用于本发明的各示例性实施例的流程图。以下图2的描述将偶然会参考来自图1的对应的元素。尽管可参考来自该图的特定元素,然而这些元素仅用于说明性目的,并非限制或缩小本发明的范围,除非明确地要求保护。
图2示出了为不被开发、设计或编码成在web服务环境中通信的传统应用程序组件生成动态web服务的方法200的流程图。这些实施例允许管理事件在传统应用程序组件的初始化期间触发动态web服务的生成。方法200包括接收初始化应用程序的请求的动作205。例如,服务110可接收初始化应用程序125的请求。应用程序125将包括不被开发成与web服务应用程序,如web服务客户机145通信的传统组件135。该初始化应用程序的请求可响应于来自web服务客户机145的web服务请求消息140而接收,或者可以响应于来自服务110的计算设备处的用户界面的输入而接收。
方法200还包括用于自动生成动态web服务的步骤225。步骤225包括标识管理配置设置指示要为传统组件生成动态web服务的动作210。例如,web服务初 始化器180可访问用于标识要在初始化应用程序125之后为传统组件135生成动态web服务175的管理配置设置155。
基于管理配置设置155,步骤225还包括访问描述用于与传统组件通信的接口的元数据的动作215。例如,基于管理设置155,web服务初始化器180可访问来自目录数据库165的描述组件接口160的元数据。元数据160应当描述诸如适当的调用115、参数115、以及动态web服务125将用于与传统组件135通信的参数115的排序等内容。组件接口160的描述也可包括诸如用于传统组件135的消息交换模式等信息。
最后,步骤225包括使用元数据来自动创建动态web服务的动作220。换言之,web服务初始化器180可创建web服务描述150,它可用于创建动态web服务175。在这一实施例中,web服务描述可以是WSDL文档。
其它示例实施例能够从web服务客户机145接收web服务请求消息140。web服务请求消息140可包括用于请求由传统组件135提供的服务的各种参数和操作。使用web服务请求消息140内的信息,动态web服务175可作出对传统组件135的调用,并将适当的参数115(如果有)传递到传统组件135以供进一步的处理。
在其它一些实施例中,基于接口描述160,可为传统组件135标识消息交换模式,其中对web服务客户机145需要响应130。之后,动态web服务175可从传统组件135接收返回值120,其中动态web服务175将返回值120格式化成web服务响应消息130。因此,响应消息130然后可被发送到web服务客户机145以供进一步的处理。注意,请求140和响应130通常是XML文档。
在又一些其它实施例中,接收停止应用程序125的请求。基于停止应用程序125的请求,动态web服务175也被自动停止。另外,删除web服务描述150,使得在下一次初始化应用程序125之后将生成新的动态web服务175和新的web服务描述150。
本发明的范围内的实施例也包括用于携带或在其上储存计算机指令或数据结构的计算机可读介质。这类计算机可读介质可以是可由通用或专用计算机访问的任一可用介质。作为示例而非局限,这类计算机可读介质可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁存储设备、或其它可用来以计算机可执行指令或数据结构的形式携带或储存所期望的的程序代码装置并可由通用或专用计算机访问的任一介质。当通过网络或另一通信连接(或者硬布线、或者无线、或硬布线和无线的组合)向计算机传输或提供信息时,计算机适当地将 该连接视为计算机可读介质。由此,任一这类连接适当地称为计算机可读介质。上述的组合也应当包括在计算机可读介质的范围内。计算机可执行指令包括,如,促使通用计算机、专用计算机或专用处理设备执行特定的一个或一组功能的指令和数据。
图3及以下讨论旨在提供对适于在其中实现本发明的计算环境的简要概括描述。尽管并非所需,但本发明将在诸如程序模块等由网络环境中的计算机执行的计算机可执行指令的一般上下文环境中描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等等,它们执行特定的任务或实现特定的抽象数据类型。计算机可执行指令、相关联的数据结构以及程序模块表示了用于执行这里揭示的方法的步骤的程序代码装置的示例。这一可执行指令或相关联数据结构的特定顺序表示了用于实现在这类步骤中所描述的功能的相应动作的示例。
本领域的技术人员可以理解,本发明可以在具有多种类型计算机系统配置的网络计算环境中实践,包括个人计算机、手持式设备、多处理器系统、基于微处理器或可编程消费者电子设备、网络PC、小型机、大型机等等。本发明也可以在分布式计算环境中实践,其中,任务由通过通信网络连接(或者通过硬布线链路、或者通过无线链路、或通过硬布线或无线链路的组合)的本地和远程处理设备来执行。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。
参考图3,用于实现本发明的示例性系统包括常规计算机320形式的通用计算设备,包括处理单元321、系统存储器322以及将包括系统存储器322的各类系统组件耦合至处理单元321的系统总线323。系统总线323可以是若干种总线结构类型的任一种,包括存储器总线或存储器控制器、外围总线以及使用各类总线体系结构的局部总线。系统存储器包括只读存储器(ROM)324和随机存取存储器(RAM)325。基本输入/输出系统(BIOS)326包含如在启动时协助在计算机320内的元件之间传输信息的基本例程,可储存在ROM 324中。
计算机320也可包括用于对磁硬盘339进行读写的磁硬盘驱动器327、用于对可移动磁盘329进行读写的磁盘驱动器328以及用于对可移动光盘331,如CD-ROM或其它光介质进行读写的光盘驱动器330。磁硬盘驱动器327、磁盘驱动器328以及光盘驱动器330分别通过硬盘驱动器接口332、磁盘驱动器接口333和光盘驱动器接口333连接至系统总线323。驱动器及其相关联的计算机可读介质为计算机320提供了计算机可执行指令、数据结构、程序模块和其它数据的非易失性存储。尽管这里描述的示例环境采用了磁硬盘339、可移动磁盘329以及可移动光 盘331,然而也可以使用用于储存数据的其它类型的计算机可读介质,包括盒式磁带、闪存卡、数字多功能盘、Bernoulli盒式磁盘、RAM、ROM等等。
包括一个或多个程序模块的程序代码装置可储存在硬盘339、磁盘329、光盘331、ROM 324或RAM 325中,包括操作系统335、一个或多个应用程序336、其它程序模块337以及程序数据338。用户可以通过键盘340、定点设备342或其它输入设备(未示出),如麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等向计算机320输入命令和信息。这些和其它输入设备通常通过耦合至系统总线323的串行端口接口346连接到处理单元321。可选地,输入设备也可以通过其它接口连接,如并行端口、游戏端口或通用串行总线(USB)。监视器347或另一显示设备也通过接口,如视频适配器348连接到系统总线323。除监视器之外,个人计算机通常包括其它外围输出设备(未示出),如扬声器和打印机。
计算机320可以使用到一个或多个远程计算机,如远程计算机349a和349b的逻辑连接在网络化环境中操作。远程计算机349a和349b的每一个可以是另一个人计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并通常包括许多或所有相对于计算机320所描述的元件,尽管在图3中仅示出了存储器存储设备350a和350b及其关联的应用程序336a和336b。图3描述的逻辑连接包括局域网(LAN)351和广域网(WAN)352,这里示出作为示例而非局限。这类网络环境常见于办公室范围或企业范围计算机网络、内联网以及因特网。
当在LAN网络环境中使用时,计算机320通过网络接口或适配器353连接至局域网351。当在WAN网络环境中使用时,计算机320可包括调制解调器353或用于通过广域网352,如因特网建立通信的其它装置。调制解调器353可以是内置或外置的,它通过串行端口接口336连接至系统总线323。在网络化环境中,相对于计算机320所描述的程序模块或其部分可储存在远程存储器存储设备中。可以理解,示出的网络连接是示例性的,也可以使用通过广域网352建立通信的其它装置。
本发明可以用其它特定形式来实施,而不脱离其精神或本质特征。所描述的实施例被认为在所有方面都仅是说明性而非限制性的。因此,本发明的范围由所附权利要求书而非以上描述来指示。落入所附权利要求书的等效技术方案的意义和范围之内的所有改变都包含在其范围之内。