用于异步Web服务的Web服务开发平台的制作方法

文档序号:6426709阅读:140来源:国知局
专利名称:用于异步Web服务的Web服务开发平台的制作方法
相关申请本专利申请要求于2001年7月2日申请的第60/302,981号临时专利申请的优先权,将该篇申请全部引入于此,以供参考。
背景技术
1.发明领域本发明总体上地涉及Web服务领域。更具体而言,本发明涉及异步Web服务的集成式开发与部署。
2.背景资料围绕Web服务出现了飞快扩张的行业,web服务这一术语被泛泛地定义为利用网络协议来共享作为服务的软件的能力。行业领头者们正忙于开发实现Web服务的基础结构,该基础结构包括这样一种机制,即用于发现Web服务,了解它们提供什么,并经由可扩展标记语言(XML)消息来与它们进行交互。这种Web服务基础结构旨在实现分布式软件应用程序的新品种,所述分布式软件应用程序由跨越因特网而共享的软件及信息业务组成。
随着Web服务基础结构演进,它变得日益复杂,因此需要更多的时间、技能、知识,且最终需要更多的金钱来搭建Web服务。因此,Web服务的生成与部署日益变得繁重,而且给普通开发人员带来了不必要的麻烦。目前,除了对经由Web服务提供的软件逻辑进行开发以外,还要求开发人员们忙于解决许多繁重而复杂的问题,这些问题包括Web服务的生成与部署。
例如,为了生成并部署最基本的Web服务,目前要求开发人员们实现一个或多个机制以供经由网际协议发送和接收数据;解析和生成利用诸如简单对象访问协议(SOAP)之类的协议所打包的消息体及消息首部;以安全方法来控制对服务的访问;在XML消息与Web服务逻辑内的内部数据结构之间映射数据;执行事务操作以使它们是可靠的而且是可预测的;对时间依赖性去耦合,以使得当外部服务发生故障或无效时,分布式应用程序能够可靠地继续执行;对实现依赖关系去耦合,以使得当外部服务改变它们的基本实现时,分布式应用程序能够可预见性地继续执行;例如,利用Web服务描述语言(WSDL)以及利用例如以WSDL描述的外部Web服务,来开发服务描述;开发这样的代理对象,这些代理对象使采用各种语言编写的客户端软件易于与服务进行交互,并且也使服务易于与其它外部服务进行交互;等等诸如此类。
这样一来,可以容易地看出除了开发Web服务逻辑以外,还要求现今的开发人员把时间和精力花费在同Web服务逻辑无关的实现和部署方面上。这种情况对于非平凡的Web服务来说尤其是如此,这些非平凡的Web服务以安全、可靠、畅销且快速的可扩展方法,来管理许多同时发生的有状态异步会话。这种有状态异步Web服务还需要这样的机制,该机制用于追踪与每个有状态会话相关联的请求(被认定为一连串相关的服务请求)并使这些请求互关联起来,用于管理与许多同时进行的、长期运作的会话相关联的数据,还用于协调那些不返回即时结果的异步会话,仅以这几个示例为例。
附图简要说明本发明将通过示范性实施例的方式加以描述,但是在附图中所举例说明的示范性实施例并非是限制性的,在这些附图中,同样的附图标记表示类似的元件,在其中

图1举例说明在Web服务提供商与消费者的示例性网络的环境内、本发明一个实施例的概观;图2举例说明依照本发明一个实施例采用元数据注释扩充的示例性源代码;图3A-C举例说明依照本发明一个实施例的Web服务方法的实现以及相关联的连接(wire)协议;图4举例说明SOAP消息内的会话ID首部和Callback(回调)位置首部;图5举例说明利用图形化程序设计流程图的本发明的增强式Web服务的一个实施例;图6举例说明依照本发明一个实施例的示例性编译器操作流程;图7举例说明依照本发明一个实施例、由一个或多个已注释的源代码文件的编译而产生的概念上的Web服务定义;图8举例说明图7中增强式Web服务定义的运行时操作流程的一个实施例;图9举例说明图7中增强式Web服务定义的消息分派过程的一个实施例;和图10举例说明适用于驻留本发明的Web服务开发平台的示例性计算机系统。
发明详述在以下的说明中,将描述本发明多个不同的方面。然而,对于本领域的技术人员来说将显而易见的是可以仅仅利用本发明的一些或所有方面来实施本发明。为了解释说明起见,阐述了特定的数目、材料和配置,以便提供对本发明的彻底理解。然而,对于本领域的技术人员而言将显而易见的是可以在没有这些特定细节的情况下实施本发明。在其它情况下,为了不让本发明含混不清,省略或简化掉众所周知的那些特征。
现在将依据由基于处理器的设备执行的操作方面,利用诸如接收、分析、确定、生成等之类的术语来介绍部分说明,上述术语符合本领域技术人员为了向本领域的其他技术人员传达他们的工作实质而一般采用的表述方式。正如本领域的技术人员众所周知的那样,参量皆采用电信号、磁信号或光信号的形式,这些信号能被存储、传递、组合,并且能通过基于处理器的设备的机械组件和电组件来对这些信号进行操纵;而术语“处理器”包括独立式的、附加式的或嵌入式的微处理器、微控制器、数字信号处理器等。
现在将以最有助于理解本发明的方式,按照多个不连续的步骤,依次来描述各种操作,但是,不应该把描述的次序看作是暗指这些操作所必须依从的次序。特别是,这些操作不必按照所介绍的次序来执行。此外,本说明重复地使用短语“在一个实施例中”,尽管它可以是指代相同的实施例,但通常来讲该短语并不是指同一个实施例。
概述本发明提供一种灵活的且可扩展的平台,该平台通过允许Web服务开发人员集中于开发Web服务的逻辑而不是实现及部署细节,以便简化开发有状态异步Web服务的工作。在本发明的一个实施例中,开发人员使用标准程序语言来表示由Web服务提供的逻辑,其中所述标准程序语言采用声明性注释加以扩充,这些声明性注释规定用来将此逻辑作为Web服务示出的首选。在编译时,增强式编译器对已注释的源文件进行分析,并且自动产生用于将其功能作为Web服务示出所需的机制。因为注释是声明性的,所以易于将它们可视化,利用图形用户接口来创建和修改它们,这样就进一步简化了开发人员的工作。因此,本发明减少了时间、知识、技能,并且最终减少了开发有状态异步Web服务所需的成本。
图1举例说明了在Web服务提供商与消费者的示例性网络环境中、本发明一个实施例的概观。在图1中,Web服务器102、开发人员客户端110、企业服务器115和120、用户客户端112和电子商务Web服务器125都经所展示的联网结构100可通信地耦合在一起。联网结构100表示一个或多个互联的数据网络,比如因特网或万维网,这些数据网络被配备成使用一种或多种众所周知的通信协议,比如超文本传输协议(HTTP)。
Web服务器102表示配备有本发明的增强式Web服务104的一种或多种计算设备,以用来向远程客户端提供会话和异步Web服务,所述远程客户端比如是用户客户端112以及企业服务器115和130,它们都可通信地耦合于联网结构100。增强式Web服务104包括注释的源代码107、增强式编译器106,以及各种已部署的服务组件108。正如在下面将进一步详述的那样,当通过增强式编译器106对注释的源代码102进行编译时,编译器生成一个或多个目标文件、软件组件和部署描述符,以便于Web服务组件108的自动部署。在举例说明的实施例中,开发人员客户端110表示配备有集成式开发环境(IDE)111的计算设备,以便于开发人员进行增强式Web服务104的基于图形接口的设计和开发。取而代之的是,或者除了经联网结构100而可通信地耦合于Web服务器102之外,开发人员客户端110还可以直接耦合于如图所示的Web服务器102。此外,比安装在诸如开发人员客户端110之类的外部客户端设备上更好的是,在不脱离本发明精神及范围的情况下,IDE 111可以代之以与Web服务器102上的增强式Web服务104共同存在。
企业服务器115和120表示可由公众访问的服务器,该服务器属于已经分别将Web服务组件118和128和相关联的Web服务描述文件117和127一起发布的一个或多个机构。在举例说明的实施例中,Web服务描述文件117和127表示基于XML的Web服务描述语言(WSDL)文件,这些文件向耦合于联网结构100的设备通告Web服务组件118和128的能力,所述联网结构包括用户客户端112和Web服务器102。
用户客户端112表示通用计算机系统,比如但不限于配备有浏览器114的台式计算机、膝上型计算机、掌上型计算机、网络设备、个人数字助理(PDA)等等。在举例说明的实施例中,用户客户端112(例如,经由联网结构100)访问电子商务服务器125所驻留的Web页面130。Web页面130可以包括如下内容131,比如商品说明、评论和价格行情,以及一个或多个Web功能132。当被执行时,Web功能132可以向Web服务器102发出请求,以使得一个或多个服务组件108将被执行,所述一个或多个服务组件又依次可以向企业服务器115和120发出一个或多个请求,以使得一个或多个远程组件118和/或128也被执行。
例如,假定Web页面130显示出由指定的在线批发商经由电子商务Web服务器125提供的待售商品。Web功能132可以请求由Web服务器102提供的购物车服务的各种功能,这些功能包括“将物品添加到购物车中”功能、“从购物车中除去物品”功能、和“结帐”功能。例如通过选择图形化显示于Web页面130上的按钮,用户可以使对应购物车功能的一个或多个请求被产生。这依次又可以使得一个或多个服务组件108将经由例如众所周知的简单对象访问协议(SOAP)而在Web服务器102上被执行。在举例说明的示例性中,用户客户端112启用结帐功能,可以使得Web服务器102与企业服务器115和/或120进行通信,从而在完成用户购买交易的过程中获得一个或多个供在线批发商使用的信用授权。在一个实施例中,Web服务器102根据其公共接口来与企业服务器115和/或120相通信,所述公共接口是由WSDL文件117和/或127来通告的。一旦企业服务器115和/或120为Web服务器102提供所征求的信用资料,服务器组件108就能依据所部署的特定Web逻辑来执行多种动作。
在上述示例中,增强式Web服务104处理与单个用户客户端有关的单个购物车交易。然而,更时常的情况下,在维护与每个交易相关联的状态的同时,需要Web服务处理大批同时发生的交易。例如,在购物车Web服务中,每个用户客户端将使用单独的购物篮,每个购物篮都包含单独的物品列表。每个用户客户端将请求新的购物车,将物品添加到购物车中,从购物车中取出物品,并且最后结帐或取消所述操作。因此,Web服务需要记录下所有的购物单,并且确保将每个新来的客户端请求(例如,新建、添加、取出和结帐)应用于正确的列表。此外,每个信用授权请求需要与正确的用户关联起来,以便防止错误授权。因此,显然的是,由于用户数目和相关交易增加,有效地管理会话(即,使多个请求与响应相关联)和相关状态的需要变得日益重要。因此,本发明自动地生成代码,以管理与多个同时发生的会话相关联的状态。同样,因为外部Web服务(即,比如由企业服务器115和120提供的那些Web服务)并不总是被设计成用来立即响应发启中的Web服务,所以本发明还提供了用于管理一个或多个异步事务的代码的自动生成,例如在上述异步事务中,响应可以在时间上与发启请求相分离,并且在独立连接上到达。
在一个实施例中,增强式编译器106编译程序设计语言源代码,所述程序设计语言源代码已经采用声明性注释进行了扩充,这些声明性注释规定用于将程序设计逻辑作为Web服务示出的首选。在编译时,增强式编译器106分析已注释的源文件,并至少部分地根据所述注解自动生成将其功能作为有状态Web服务和/或异步Web服务示出所必需的机制。
在运行时,本发明的增强式Web服务104接收来自从远程客户端的消息,所述远程客户端请求调用一个或多个Web服务方法。增强式Web服务104解析每个消息,以识别正被调用的方法,并且例如依据所请求的方法是否包括无状态请求或有状态请求,来将这些请求分派到一个或多个服务组件108。
Web服务设计在本发明的一个实施例中,IDE集成式开发环境111便利于基于图形接口的Web服务设计与开发。例如,通过使用IDE 111,开发人员能够图形化地将远程客户端、外部服务、Web方法等与正设计的Web服务逻辑关联起来。另外,通过使用IDE 111,开发人员例如能够识别哪一种方法(如果有的话)引起外来消息元素与本地语言对象之间的非同态映射。此外,一旦一种方法已被添加到Web服务(例如,由开发人员经由图形操纵来添加),IDE 111就为该开发人员提供通过规定一个或多个参数和/或属性来进一步定义和/或修改所述方法的能力。例如,如果开发人员拖拽方法指示器(indicator),以便将当前的Web服务图形地连接到客户端,那么就可以显示对话框,以使开发人员能够声明方法名称、成员变量名、变量类型、期望返回的类型等等。同样,如果开发人员将外部服务图形地关联于正在开发中的Web服务,那么就可以给该开发人员提供导入Web服务的描述文件的机会,所述描述文件比如是WSDL文件117或127。
在本发明的一个实施例中,IDE 111根据图形输入和/或文本输入,利用声明性的元数据自动注释Web服务源代码,所述图形输入和/或文本输入是由开发人员经IDE 111的一个或多个接口提供的。在一个实施例中,增强式编译器106在源代码的编译期间使用元数据注释,以便于有状态异步Web服务的生成。例如,如果开发人员将一种方法图形地标识成正被缓冲的方法(例如,通过拖拽表示缓冲器的图标,所述缓冲器位于相关的方法图形表示上或是接近于相关的方法图形表示),那么IDE 111就利用元数据来注释源代码内相关的方法,以向增强式编译器106指明所述方法将要被缓冲。在编译期间,增强式编译器106至少部分地依据所述元数据注释来将所述方法标识为正被缓冲,构造一个或多个类文件(和可能地附加支持文件),并由此将他们部署到服务器102,从而缓冲那个方法的新来请求。
在本发明的一个实施例中,使用IDE 111的开发人员能够在各种屏幕视图之间来回切换,所述各种屏幕视图包括图形设计视图和源视图。依照本发明的一个实施例,通过使用源视图,开发人员能够直接在源代码内人工地输入元数据注释,以标识将作为Web服务加以示出的源代码的那些部分。
当开发人员与IDE 111进行交互以规定Web服务时,IDE 111同时在Web服务器102上创建目录,将各种文件存储在上述Web服务器102当中,所述各种文件包括Web服务源代码文件和已导入的Web服务描述文件。在实施例中,IDE 111将“*.jws”扩展名附加在Web服务源代码文件名上,该源代码文件名继而存储在可由公众访问的项目目录中,该目录位于Web服务器102上。在一个实施例中,Web服务器102被部署成将这个文件客户端请求重定向至用以处理文件内容而非将文件内容返回到客户端的小服务程序。IDE 111可以使用诸如文件传送协议(FTP)之类的一个或多个网络协议、经由联网结构100来与Web服务器102进行通信,从而创建此类文件及目录。
元数据注释如先前所述,在本发明的一个实施例中,通过把元数据注释添加(不论是自动由IDE 111添加,还是由开发人员人工地添加)到源代码文件来增加源代码文件,从而描述源文件的哪一个部分将作为Web服务加以示出以及控制诸如连接协议首选之类的实现细节。在一个实施例中,将元数据注释置于注释栏内,该注释栏恰好位于要加注释的语句或声明之前。在本发明的一个实施例中,元数据注释包括一个或多个符号和/或关键字,所述符号和/或关键字是由编译器已知的扩展式语法定义的。在举例说明的实施例中,位于“@”符号之前的关键字向增强式编译器106指明相关的源代码将作为Web服务加以示出的一部分,其中配备所述增强式编译器,以根据扩展语法来标识此类符号/关键字组合或其派生物。
在本发明的一个实施例中,编译器106已被增强,以用来识别许多此类元数据注释。在一个实施例中,增强式编译器106识别那些指明相关的方法是否为有状态方法的元数据注释,如果是,则判断是将该方法应用于特定客户端与Web服务器102之间会话的发启(即“发启”方法)、会话的继续(即“继续“方法),还是应用于会话的完成(即“结束”方法)。在一个实施例中,有状态注释使得增强式编译器106生成一个或多个持久组件,来维护与相关方法有关的会话状态。在一个实施例中,增强式编译器106自动地生成一个或多个企业JavaBeansTM(比如实体Bean)以及相关联的部署描述符,以存储并管理此类会话状态。在一个实施例中,每当在运行时调用发启方法时,会话的新实例被创建,并且利用持久组件将唯一标识符与那个会话实例相关联,以便于多个同步会话的管理。在一个实施例中,请求会话发启方法的客户端生成唯一标识符,直到结束方法被调用为止,所述唯一标识符被用于客户端与Web服务之间的每个并发事务。在一个实施例中,通过基于SOAP的消息首部,来在客户端与Web服务之间传递所述标识符。
除了会话注释之外,在一个实施例中,增强式编译器106还识别那些指明相关的方法是否应被缓冲的元数据注释,从而在颠峰使用时期可靠地处理大量的同步请求。在一个实施例中,包含缓冲注释的源代码编译使得增强式编译器106实例化一个或多个队列,来临时存储一个或多个相关的请求,以便于当服务器102具有能够自由处理上述请求的资源时,可以按上述请求到达的次序来处理它们。在一个实施例中,增强式编译器106利用一个或多个企业JavaBeansTM(比如消息驱动的Bean)来分派队列请求。
图2举例说明了依照本发明一个实施例、采用元数据注释扩充的示例性源代码。如图所示,图2中的示例性源代码表示五个方法(206-210),相关联的元数据注释(201-205)分别位于这五个方法前。方法206-209将会话方法分别表示成由201-204中@CONVERSATION(会话)注释的存在来加以标识的方法,而方法210表示无状态方法,因为它不具有@CONVERSATION(会话)注释。正如通过利用注释204内的“@BUFFER(缓冲)”所指示的那样,方法209是一个缓冲方法。在一个实施例中,“@OPERATION(操作)”注释使增强式编译器106采用诸如HTTP及SOAP之类的协议将紧随其后是注释的所述方法的功能示出(即,使其可公开访问)。同样,“@CONVERSATION START(会话开始)”、“@CONVERSATION CONTINUE(会话继续)”及“@CONVERSATION FINISH(会话完成)”元数据注释分别向增强式编译器106表明是要发启新的有状态会话、继续现存的会话,还是要结束现存的会话。
尽管在举例说明的实施例中,每个会话注释都是位于@OPERATION(操作)注释之前的,但是其它实施例可以不需要这种结构形式。例如,@OPERATION(操作)注释可以根据@CONVERSATION(会话)注释或其它的源代码特征(例如,比如公共的、私有的和静态的源代码)推导出来。此外,这里所描述的各种元数据注释表示配备增强式编译器106以便识别元数据注释的子集。由此,本发明不应该被当作仅限于那些所描述的元数据注释。而且,应当注意到只要配备了所述编译器来识别这类扩展式语法,就能使用任何适宜的元数据注释语法。此外,应当注意的是不必利用源文件注释来把元数据传送给编译器,而是代之以利用如独立的文件来传送上述元数据。例如,在不脱离本发明精神的情况下,增强式编译器能够被编程以用来从专门地已格式化的XML文件那里读取元数据,所述XML文件具有与源文件相同的名称,但却具有不同的文件扩展名。
声明异步响应Web服务并不总是希望或可能向特定请求立即返回响应。一些Web服务,如所调用的异步Web服务,被设计成能返回暂时与相关原始请求分离的一个或多个响应。
在本发明的一个实施例中,开发人员可以向称为回调的内部接口中的客户端声明异步响应。
例如,public static interface Callback/* @Operation* @Conversation Finish */void returnResult(String s);}开发人员能够利用如下声明的回调类型的成员变量来发启异步响应Callback client;当增强式编译器106遇到回调接口及相关联的成员变量声明时,它会自动生成代码以创建客户端代理对象,该对象实现用于返回异步响应的已声明的回调接口,并且将其指派给已声明成员变量。例如,Web服务开发人员能够利用以下代码行来生成上述已声明的异步响应client.returnResult(″It worked!″);包含回调地址及对话标识符的客户端代理对象,被存储为每个Web服务实例的会话状态的一部分,从而将每个回调与适当客户端实例相关联。
连接协议注释的源代码还能够定义捆绑,该捆绑规定客户端接口如何捆绑于物理连接格式及协议。在一个实施例中,每个服务接口对不同协议都能够具有多种服务捆绑。在一个实施例中,所支持的服务捆绑包括(但不局限于)HTTP之上SOAP、SMTP之上的SOAP、XML的通用HTTP POST、在诸如FTP及邮件等其它协议之上的XML传输、Java消息传送服务(JMS)或Microsoft消息队列服务(MSMQ)之上的XML传输、到专有协议的连接等等。在一个实施例中,有关服务接口及协议捆绑的信息,可以经由WSDL文件加以导出。
在一个实施例中,Web服务器102所调用的方法可以根据经连接协议发送的数据以及图3A-C中举例说明的其它元数据推导出来。例如,在图3A中,“greeting”方法的签名带有两个参数加标记的名和姓。包含消息体中的适当限定的<greeting>元素的新来的SOAP消息,以及具有如图3B所示的孩子元素<firstname>及<lastname>的新来SOAP消息,将会导致这个方法在运行时被调用。增强式Web服务104将解析图3B中所举例说明的请求,根据URL/app/mypackage/CreditReport.jws来查找目的地对象,根据<firstname>及<lastname>元素来创建串对象,并且根据<greeting>元素把它们当作参数传递给“greeting”方法。同样,增强式Web服务104将利用greeting方法的返回值,生成诸如按图3C所举例说明的响应这样的HTTP SOAP响应。
外部服务正如先前所提到的那样,在一个实施例中,本发明已注释的元数据方便了由增强式Web服务104来对外部服务(比如服务组件118和128)进行访问。在一个实施例中,增强式编译器106检测表示外部服务的一个或多个已注释的成员变量声明,发现相关联的服务定义文件,自动生成并指派为与外部服务相交互而设计的代理对象,并且自动生成并关联代码,以处理来自于那些服务的异步响应。在一个实施例中,增强式编译器106扫描已提供的类路径(classpath),以便查找与已注释成员变量的类名(classname)相匹配的一个或多个服务定义文件(例如,WSDL文件)并且根据该服务描述自动生成代理对象。这使Web服务开发人员能够与外部Web服务进行交互,就好似它是局部Java对象一样。例如,声明/* @Service(服务) */public Bank mybank;会允许开发人员照此来使用银行服务float balance=mybank.getBalance();在这种情况下,由增强式编译器106生成的mybank代理对象将根据类路径(classpath),利用Bank.wsd1文件中的地址、协议和格式信息,来向远程银行服务发出请求。在运行时,由增强式编译器106生成的代码将自动为如上所示源代码里所发现的每个“@Service”注释实例化一个代理对象。
有状态外部服务与外部服务相关联的服务描述文件可以指明它具有若干有状态会话方法。在这种情况下,为与那些服务相交互而生成的每个代理对象将包括这样的代码,该代码用以生成并存储外部服务的相关联会话实例的唯一标识符。当所述代理对象生成由外部服务规定的会话消息首部时(参看如下的“会话消息首部”),将使用这个唯一的标识符。
如果存在唯一标识符,每个代理对象都包括一唯一标识符,每个代理对象在开发过程中被存储为服务状态的一部分。这有效地将开发过程中服务的每个实例与外部服务的相应实例关联起来。
异步外部服务外部服务不总是立即返回响应。因此,增强式编译器106自动生成这样的软件,该软件用于接收异步响应,使响应与相应的会话状态相关联,并通过用户定义的代码来处理响应。
依照本发明的讲授,异步Web服务在其相关联的服务描述(如,WSDL)文件中将其异步响应声明为“out方法”。Out方法能够被视为远程回调,也就是远程函数,异步Web服务调用此函数,以向调用者(caller)返回与早期请求相关联的结果。由本发明的增强式编译器生成的软件将这些异步响应传递给专门指定的成员函数,以便可以由开发人员加以定义。在一个实施例中,这些成员函数名是通过把异步out方法名附加于局部代理对象名而构成的。例如,为了处理上面所定义的银行服务的creditCheckResponse()out方法,开发人员将生成如下形式的函数public void mybank_creditCheckResponse(String result){...}由增强式编译器106生成的外部代理对象将把回复地址添加到相关联的请求,并且在那个地址处侦听从mybank服务那里产生的creditCheckResponse()消息。在一个实施例中,如果异步请求是有状态会话的一部分,那么由增强式编译器生成的代理对象就将在调用mybank_creditReportResponse()之前,预先生成并使用适当的唯一标识符,以使异步响应与正确的会话状态相关。
会话消息首部在一个实施例中,通过使用在贯穿整个会话生命期用于帮助维护会话状态的消息首部,本发明的会话方面变得更为方便。在本发明的一个实施例中,使用一个或多个会话ID首部、默认回调位置首部和回应会话ID来维护会话状态。例如,图4举例说明了从客户端到服务器的SOAP消息内的会话ID首部和回调位置首部。从服务器到客户端的响应中,使用回应会话ID。
在一个实施例中,会话ID表示由会话的第一消息的始发者所生成的唯一串。会话ID可以包括任何结构,只要它是全球唯一的。在一个实施例中,客户端生成全球性唯一标识符(GUID),该唯一标识符继而被封装在SOAP首部当中,然而,统一资源定位符(URL)、时间戳及其它唯一对象,都可以用来代替GUID以生成唯一标识符。在一个实施例中,客户端嵌入其自己的实例标识符,作为会话ID的一部分,以便使得来自于服务器的、包含所述会话ID的异步回调可用于将回调路由至适当的客户端实例。此外,如果会话的第一消息返回同步响应,则服务器就能够生成GUID并将其作为响应的一部分返回至客户端。当“继续”或“结束”方法作为会话的一部分被发送(或者从客户端发送到服务器,或者从服务器发送到客户端)时,在起始消息中所建立的相同的会话ID被逐字地传回。在一个实施例中,回调位置表示任意的URL,所述URL表明在该会话所涉及到的客户端正在侦听来自于Web服务的回调时所处的位置。在一个实施例中,回调位置首部能够与任一发启、继续或结束方法相关联地出现。
编译已注释的源代码图5举例说明了依照本发明一个实施例、增强式Web服务104的图形化程序设计流程图。在举例说明的实施例中,把一个或多个已注释的源代码文件502提供给增强式编译器506,以便被编译成一个或多个目标代码文件509,所述目标代码文件定义了一个或多个可执行服务组件,所述可执行服务组件可以由远程连接的客户端访问。在一个实施例中,已注释的源代码文件502表示一个或多个基于Java的文件,所述基于Java的文件已依照本发明的一个实施例而扩充了元数据注释,从而有助于简化Web服务开发与部署。虽然在举例说明的实施例中,已注释的源代码文件502被描述为是基于Java的,但是它们仍然能表示本技术领域中所公知的各式各样的程序设计语言,比如C++和ECMAScript。
一旦编译器506接收到已注释的源代码文件502,解析器505就读取并解析源代码内所包含的程序设计语句。在一个实施例中,根据扩展式语法,对编译器506进行增强,以识别注释,所述扩展式语法用于规定将被部署为Web服务的源文件的功能。由此,当解析器505解析已注释的源代码时,它根据这种扩展式语法来识别嵌入式注释的存在及组成。在本发明的一个实施例中,编译器506通过源代码注释来推断要向远程客户端示出的Web服务的接口,推断编译器506所创建的运行时将要调用的服务的接口,以及推断Web服务的内部存储器需求和持久行为。
在解析已注释的源代码502期间,解析器505识别代码中所使用的对象类型,并且试图定位与每种类型相对应的定义。例如,如果“Bank”类型的变量“b”被声明,则解析器505就判断定义该“Bank”类型的对象或库文件是否已经存在于指定的目录组(例如,就像在Web服务器102上由IDE创建的目录组那样)之内。如果对象或库文件不存在,则解析器505就判断可通过编译器506运行而生成目标文件的源文件是否存在。同样,如果既不存在目标文件也不存在源文件,则解析器505就判断可由编译器506使用来生成目标文件的Web服务描述(如,WSDL)文件是否存在,所述目标文件实现代理对象,以供与相关联的Web服务进行交互。依照本发明的一个实施例,如果判定目标文件不存在,则解析器505就走查文件类型的有序表,以便识别在生成必要目标文件的过程中可加以使用的文件。
在一个实施例中,编译器506生成一个或多个目标文件,所述目标文件定义可公开访问的服务组件508,该组件可以由一个或多个远程客户端执行。此外,编译器506根据已注释的源代码502来生成元数据510,并将它与目标代码509及服务组件508相关联。在一个实施例中,元数据510包括与所述服务相关联的注释、方法、成员变量、外部服务及回调接口的描述。一旦编译器506已将注释的源代码502编译成可执行代码,该代码接着就被提供给执行引擎(未示出),该执行引擎控制所述代码的执行(例如,由处理器来控制),并且实施常规的执行运行时服务,比如存储器分配请求及释放、错误/异常事件处理等等。对于举例说明的实施例而言,编译器506包括应用编程接口(API)(未示出),通过该应用编程接口,包含在已注释的源代码502之内的程序设计语句可以受编程控制地加以提交,以供由多种专用过程加以编译。例如,依照本发明的一个实施例,Web服务器102在通过联网结构100接收到封装SOAP的XML方法调用时,就做出对增强式Web服务104的调用。
图6举例说明了依照本发明一个实施例的编译器506的示例性操作流程。在操作过程中,在块601,编译器506首先读取来自于已注释的源代码502的代码段。通过使用本技术领域公知的许多解析技术中的任何一种,解析器505继而解析已读取的代码段,从而根据编译器506所维护的语言词典或语法来识别所述代码段中所包含的一个或多个注释(块602和604)。如果发现了注释,则在块608、编译器506就确定注释类型(例如,会话的、异步的等),在块609,识别它修改的语句或声明,在块610,标识并生成一组助手对象,该组助手对象将挂钩于在运行时被编译的目标文件,并且在块611,将从注释中析取的元数据与目标文件相关联。在块612,如果在所述代码段内未发现注释,或者在助手对象已被生成之后,视情况而定,编译器506就继续读取代码段并对表达式求值,直到所有代码都已被读取并解析为止。此外,在块614,编译器506可以选择性地对所分析的表达式应用一次或多次优化。所述优化可以是本技术领域中所公知的一种或多种可采用的编译器优化技术当中的任何一种。最后,在对所分析的命令进行或不进行优化的情况下,在块616,编译器506为所分析的表达式生成可执行代码。在一个实施例中,编译器506为所分析的表达式生成字节码。在可选实施例中,可以代之以实施其它等效的“代码生成”方法。
说明性的Web服务定义增强式编译器106对已注释的源代码进行的编译,将会导致生成一个或多个目标文件、软件组件以及部署描述符,从而便于Web服务的自动部署。图7举例说明依照本发明一个实施例、由一个或多个已注释的源代码文件的编译而产生的概念上的Web服务定义。
图7的Web服务定义包括小服务程序容器和企业JavaBean(EJB)容器。小服务程序容器和EJB容器可通信地耦合在一起,以用来分派Web服务请求。在举例说明的实施例中,小服务程序容器侦听在指定通信端口上接收到的请求,并且利用部署描述符(DESC)来识别哪个小服务程序应当响应该请求。在一个实施例中,带“.jws”扩展名的文件的所有请求均被路由至侦听器小服务程序。在一个实施例中,所述侦听器小服务程序利用请求的URL,来判断哪个Web服务应当接收该请求,并且识别先前由增强式编译器506生成的相关联的元数据的位置(META)510(例如,存储在类文件中的相关元数据的位置)。
在本发明的一个实施例中,当增强式编译器编译已注释的源代码文件时,它依据所述代码的结构组成来构造和部署一个或多个EJB。在最小限度,增强式编译器构造和部署至少一个分派组件(702),以服务于从小服务程序容器转发来的消息。如果增强式编译器确认Web服务具有至少一种缓冲方法,那么增强式编译器除了部署消息驱动的Bean来服务于所述队列之外还生成队列结构(704)。同样,如果特殊的Web服务包含无状态方法,则增强式编译器就部署无状态会话Bean来处理那些方法的请求。另外,如果Web服务包含有状态方法,则增强式编译器就部署实体Bean来管理与每个服务实例相关联的会话状态。分派组件702和706利用增强式编译器506所生成的元数据(META)510,来判断所需方法为有状态还是无状态,并且按照情况将它部署成有状态或无状态的组件。如果所需方法为有状态的,则分派组件702和706就进一步利用元数据(META)510来判断所述方法是发启方法、继续方法还是结束方法,并且按照情况创建新的有状态实例或者查找先前已创建的实例(参看以下图9的论述)。
说明性的运行时操作图8举例说明了图7中增强式Web服务定义的运行时操作流程的一个实施例。起初,Web服务104从诸如用户客户端112之类的远程设备通过联网结构100接收消息(802)。在一个实施例中,所述消息是经由HTTP发送来的封装SOAP的Web服务请求。一旦接收到消息,小服务程序容器就从所述HTTP消息中析取出SOAP请求,并且利用相关联的部署描述符来判断如何控制该请求(803)。例如,所述部署描述符可以说明所有标识有诸如“*.jws”之类的预定义文件扩展名的Web服务的请求均被路由至侦听器小服务程序,以供进一步分派。在一个实施例中,所述侦听器小服务程序继而利用请求URL来标识接收着的Web服务(804),并且访问由增强式编译器506早先生成的相关联的元数据510,以判断是直接分派该消息还是经由队列来分派该消息(806)。分派器702和706的其中一个还访问元数据510,以判断是将该消息作为无状态方法、发启方法、继续方法进行分派,还是将其作为结束方法进行分派(808)。
图9举例说明了图7中增强式Web服务定义的消息分派过程的一个实施例。起初,侦听器小服务程序通过解析SOAP消息来确定要调用的方法(901)。在一个实施例中,侦听器小服务程序利用与所述方法相关联的元数据,来识别该消息是标识缓冲方法还是标识非缓冲方法(902)。如果侦听器小服务程序判定所述消息未标识缓冲方法,则该侦听器小服务程序就将该消息路由至通用分派器702(904)。然而,如果侦听器小服务程序判定所述消息标识缓冲方法(902),则所述侦听器小服务程序就经由队列704把该消息路由至分派器706(903)。接下来,选定的分派器检查相关联的元数据,以判断所述消息是标识有状态方法还是标识无状态方法(906)。如果识别出是无状态消息,则分派器就将所述消息路由至无状态会话Bean,以供由Bean所打包的Web服务逻辑加以处理(908)。然而,如果选定的分派器判定所述消息标识有状态方法,则所述分派器就标识与该消息相关联的唯一标识符(910)。在一个实施例中,所述唯一标识符是由请求客户端设备生成的,并且封装在一个或多个SOAP消息首部内。
接着,分派器继续判断所述消息是表示发启方法(912)、继续方法(920),还是结束方法(930)。如果所述方法表示发启方法(912),则就生成包含Web服务逻辑和会话状态的实体Bean的新实例(914),然后与所述标识符关联起来(916)。分派器利用相关联的元数据,来判断已注释的源代码107是否定义了回调接口以及是否声明了回调类型的变量。如果是,则根据所述回调接口来创建用于与客户端异步交互的客户端代理对象,并且将该客户端代理对象指派给已声明的变量。此外,分派器判断已注释的源代码107是否声明了一个或多个用于与外部服务进行交互的变量。如果是,则在分派器就根据由相关服务定义(如,WSDL)文件定义的接口,来创建用于与这些远程服务进行交互的代理对象,并且将它们指派给已声明的变量。此外,分派器部署Web服务,以接收在每个相关定义(如,WSDL)文件中声明的所有异步回调,并将所述回调路由至通过把已声明的变量名附加于回调方法名(如,mybankcreditCheckResponse(String result))而命名的Web服务方法。分派器将所有代理对象(不论是为与客户端相交互而创建的,还是为其它外部服务而创建的)存储为实体Bean的会话状态的一部分。所述消息继而被路由至新的实体Bean实例,以供由Web逻辑作进一步处理。
如果所述方法表示继续方法(920)或结束方法(930),则与那个标识符相关的Bean实例(922、932)就会被发现,并且所述消息被路由至那个Bean,以供由Web逻辑作进一步处理(924、934)。然而,就结束方法而言,一旦处理已经完成,就销毁所述Bean实例(936)。
在本发明的一个实施例中,一旦所述消息已被路由至Bean(不论是有状态的还是无状态的),SOAP处理器就从所述SOAP体中移除已封装的XML消息,根据XML消息的根元素来判断要调用Web服务逻辑的哪个方法,将XML孩子元素映射到新创建的程序设计语言对象上,所述对象被用作对应所述方法的自变量,并且调用将新创建的对象作为参数来传递的Web服务方法。如果所调用的Web服务方法同时返回一值,则Bean将会把该值映射到相对应的XML元素上,利用在所述请求中所使用的相同的协议细节(例如HTTP之上的SOAP)来将所述值打包到消息中,并将其返回给客户端。
一旦被调用,任何一种Web服务方法就都能够使用所创建的代理对象来生成对客户端或外部服务的调用。所述代理对象将作为参数传递的对象映射成相对应的XML元素,并使用它们以及远程方法名来生成消息并将其发送到远程服务或客户端。就外部服务而论,利用由相关服务描述文件规定的协议特定细节,来生成和发送消息。就客户端而言,在初始的发启方法中,利用客户端所使用的协议特定细节来生成和发送消息。在一个实施例中,解析来自于客户端或远程服务的同步响应,以析取结果并将其映射到代表性对象上,将该代表性对象作为代理对象方法调用的返回值而返回给Web服务代码。
侦听器小服务程序与分派Bean把来自于外部服务的异步响应和请求分派给适当的实体Bean,正如由客户端发送的请求一样。这些响应被路由至Web服务逻辑的适当方法,所述Web服务逻辑是由专门的命名惯例加以标识的。具体地说,它们被路由至通过将外部服务out方法名附加于已声明的服务代理变量名而命名的方法(例如,mybank_creditCheckResponse(String result))。
示例性宿主计算机系统图10举例说明了适用于驻留本发明的Web服务开发平台的示例性计算机系统。如图所示,计算机系统1000包括一个或多个处理器1002,以及系统存储器1004。另外,计算机系统1000包括海量存储设备1006(比如磁盘、硬盘、CDROM等)、输入/输出设备1008(比如键盘、光标控制器等),以及通信接口1010(比如网络接口卡、调制解调器等)。这些元件都经由系统总线1012而彼此相互耦合,所述系统总线代表一条或多条总线。在多条总线的情况下,这些总线通过一个或多个总线桥(未示出)而桥接在一起的。这些元件中的每一个都执行它们在本技术领域中所公知的常规功能。具体来讲,使用系统存储器1004和海量存储器1006来存储实现本发明之编译器和/或增强式Web服务的程序指令的作业拷贝和永久拷贝。在工厂,或者在现场,可以通过例如分发介质(未示出)或通过通信接口1010(从分布式服务器(未示出))来将所述永久拷贝的程序指令载入到海量存储器里。这些元件1002-1012的结构组成都是已知的,因此将不作进一步描述。
结论和总结因此,从上面的说明可知,已经描述了有状态Web服务的基于注释的开发平台。虽然已经参照举例说明的实施例和上面枚举的实施例对本发明作了描述,但是本发明并不局限于这些所描述的实施例。在符合以下权利要求中所阐述的本发明范围的情况下,可以作出许多修改和变更。因此,上述实施例仅仅是说明性的,而不限制于本发明本身。
权利要求
1.一种在过程程序设计环境内规定异步Web服务的方法,所述方法包括提供至少一部分Web服务逻辑的源代码表示,所述逻辑包括至少一个已声明为回调方法的方法;以及标识已声明用于实现所述回调方法的成员变量,以便使编译器利用所述回调方法来生成用于与客户端异步交互的客户端代理对象,并且将所述客户端代理对象指派给所述成员变量。
2.如权利要求1所述的方法,其中所述回调方法是在回调接口定义内部声明的。
3.如权利要求1所述的方法,还包括规定与所述回调方法相关联的一个或多个声明性注释,以便使编译器生成一个或多个持久组件,来维护与已标识的成员变量相关的会话状态。
4.如权利要求3所述的方法,其中所述一个或多个声明性注释向所述编译器表明已标识的方法是否为发启方法、继续方法及结束方法中的至少之一,其中所述发启方法应用于客户端与Web服务之间有状态会话的发启,所述继续方法应用于客户端与Web服务之间进行中的有状态会话的继续,而所述结束方法应用于客户端与Web服务之间进行中的有状态会话的结束。
5.如权利要求4所述的方法,其中当在运行时调用已声明为发启方法的方法时,会话的新实例被创建,并且将一唯一标识符与该会话实例相关联,以便于管理多个同时发生的会话。
6.如权利要求4所述的方法,其中当在运行时调用已声明为继续方法或结束方法的方法时,获得一唯一标识符并且使用该唯一标识符来访问会话的对应实例。
7.如权利要求6所述的方法,其中所述唯一标识符是由客户端提供的。
8.如权利要求6所述的方法,其中当在运行时调用已声明为结束方法的方法时,所述会话的对应实例在由Web服务逻辑处理之后被销毁。
9.如权利要求3所述的方法,其中所述一个或多个声明性注释向所述编译器表明已标识的回调方法是否被缓冲,使得所述编译器实例化一个或多个队列来临时存储一个或多个异步响应,以便在客户端能够接收所述响应时,将所述响应递送到客户端。
10.在过程程序设计环境中,一种将异步响应返回到客户端的方法,所述方法包括标识与客户端相关联的回调接口;标识已声明用于实现所述回调接口的成员变量;生成实现所述回调接口的代理对象;以及将所述代理对象指派给所述成员变量。
11.如权利要求10所述的方法,其中所述回调接口内部的一个或多个声明性注释使得编译器生成一个或多个持久组件,来维护与已标识的成员变量相关的会话状态。
12.在异步Web服务中,一种方法,包括接收来自于客户端的消息,该客户端请求应调用的Web服务方法;解析所述消息,以便除了识别回调地址之外,还识别所请求的Web服务方法,所述回调地址表明客户端正在侦听来自于Web服务的回调时所处的位置;存储与先前生成的代理对象相关联的回调地址;以及调用所请求的Web服务方法。
13.如权利要求12所述的方法,进一步包括识别由客户端提供的实例标识符,所述实例标识符表明正在侦听来自于Web服务的回调的客户端的特定实例;以及存储与所述回调地址及代理对象相关联的所述实例标识符。
14.如权利要求13所述的方法,其中所述回调地址和实例标识符中的至少之一被封装在一条或多条请求消息中。
15.如权利要求13所述的方法,其中所述实例标识符被嵌入在对话标识符内,所述对话标识符用来访问客户端与Web服务之间会话的对应实例。
16.如权利要求14所述的方法,其中所述回调地址与实例标识符中的至少之一被封装在一个或多个SOAP消息首部中。
17.如权利要求13所述的方法,其中所述实例标识符是GUID。
18.如权利要求12所述的方法,其中调用所请求的Web服务的方法还包括从所述消息中析取数据表示语言元素;将所述数据表示语言元素映射到程序设计语言对象;调用所请求的Web服务方法,所述Web服务方法包括将程序设计语言对象作为参数传递给所述Web服务方法;将Web服务方法所返回的程序设计语言对象映射到代表性数据表示语言元素;根据在生成所述请求的消息的过程中客户端所使用的一个或多个协议,将所述代表性数据表示语言元素打包;以及依照在将所述消息发送到Web服务的过程中客户端所使用的一个或多个协议,将打包后的数据表示元素发送到客户端。
19.如权利要求13所述的方法,还包括通过调用先前利用已声明的成员变量所生成的代理对象的方法,响应所述消息而生成到客户端的异步响应,其中调用包括将程序设计语言对象作为参数传递给所述方法,将所述程序设计语言对象和方法调用映射到代表性数据表示语言元素;将代表性数据表示语言元素和回调实例标识符打包成异步响应消息,以及依照在将原始请求消息发送到Web服务的过程中客户端所使用的一个或多个协议,将所述异步响应消息发送到位于回调地址处的客户端。
20.一种用于在过程程序设计环境内规定逻辑以便接收来自异步Web服务的回调的方法,所述方法包括标识将被用来与所述异步Web服务相交互的成员变量;以及提供与所述成员变量相关联的方法,该方法具有签名并且包含用于接收来自所述异步Web服务的所述回调的逻辑。
21.如权利要求20所述的方法,其中所述方法是由开发人员人工提供的。
22.如权利要求20所述的方法,其中所述方法签名是由集成式开发环境、根据规定的服务描述文件提供的,所述服务描述文件包含对所述回调的声明。
23.如权利要求20所述的方法,其中利用方法命名惯例,将所述方法与所述成员变量相关联,所述方法命名惯例使用所述成员变量名和所述回调名。
24.如权利要求20所述的方法,进一步包括规定与所述成员变量相关联的一个或多个声明性注释,从而使得编译器生成一个或多个持久组件,来维护与异步Web服务相关的会话状态。
25.如权利要求24所述的方法,其中所述一个或多个声明性注释是在源代码内加以规定的。
26.如权利要求24所述的方法,其中所述一个或多个声明性注释是在源代码外加以规定的。
27.如权利要求24所述的方法,其中所述一个或多个声明性注释是由开发人员人工规定的。
28.如权利要求24所述的方法,其中所述一个或多个声明性注释是由集成式开发环境、根据开发人员所提供的输入自动规定的。
29.如权利要求20所述的方法,其中来自于外部Web服务的异步响应被传递给与所述成员变量相关联的所述方法。
30.在Web服务中,一种方法,包括利用先前由编译器、根据与外部Web服务相关联的服务描述文件所生成的代理对象,来生成到外部Web服务的请求,其中所述请求包括一回调地址,该回调地址用于标识所述外部Web服务应该将响应返回到的位置;利用一个或多个传输协议,将所述请求作为请求消息发送给外部Web服务;以及接收来自于所述外部Web服务的异步响应。
31.如权利要求30所述的方法,其中所述回调地址包括代理对象标识符。
32.如权利要求30所述的方法,其中所述回调地址包含在请求消息的一个或多个首部内。
33.如权利要求32所述的方法,其中所述请求消息是基于SOAP的消息。
34.如权利要求30所述的方法,其中所述回调地址包括URL,该URL标识Web服务正在侦听来自于外部Web服务的响应时所处的位置。
35.如权利要求30所述的方法,其中所述请求还包括一回调实例标识符,该回调实例标识符表示请求中的Web服务的具体实例,一异步响应将被路由至所述请求Web服务。
36.如权利要求35所述的方法,其中所述回调实例标识符包含在所述请求消息的一个或多个首部内。
37.如权利要求36所述的方法,其中所述请求消息是基于SOAP的消息。
38.在Web服务中,一种方法,包括接收用于标识回调地址、回调方法和代理对象标识符的消息;从消息中析取代理对象标识符;至少部分地根据代理对象标识符和回调方法,来确定将被调用的方法;以及将请求路由至将被调用的方法。
39.如权利要求38所述的方法,其中所述回调地址包括URL,该URL表明Web服务侦听来自于外部Web服务的回调时所处的位置。
40.如权利要求38所述的方法,其中确定将被调用的方法包括将与回调方法相关联的名称附加于代理对象标识符。
41.如权利要求38所述的方法,其中所述消息还标识回调实例标识符。
42.如权利要求41所述的方法,其中所述路由步骤还包括至少部分地根据该回调实例标识符来识别一回调实例;以及将该请求路由至与所识别的回调实例相关联的方法。
43.一种制造物品,包括在其中存储有多条编程指令的存储介质,当执行这些指令时提供图形接口以便于在过程程序设计环境内规定异步Web服务,包括提供至少一部分Web服务逻辑的源代码表示,所述逻辑包括至少一个已声明为回调方法的方法;以及标识已声明用于实现所述回调方法的成员变量,以便使编译器利用所述回调方法来生成用于与客户端异步交互的客户端代理对象,并且将所述客户端代理对象指派给所速成员变量。
44.如权利要求43所述的物品,其中所述回调方法是在回调接口定义内部声明的。
45.如权利要求43所述的物品,其中所述编程指令进一步便于规定与所述回调方法相关联的一个或多个声明性注释,以便使编译器生成一个或多个持久组件,来维护与已标识的成员变量相关的会话状态。
46.如权利要求45所述的物品,其中所述一个或多个声明性注释向所述编译器表明已标识的方法是否为发启方法、继续方法及结束方法中的至少之一,其中所述发启方法应用于客户端与Web服务之间有状态会话的发启,所述继续方法应用于客户端与Web服务之间进行中的有状态会话的继续,而所述结束方法应用于客户端与Web服务之间进行中的有状态会话的结束。
47.如权利要求46所述的物品,其中当在运行时调用已声明为发启方法的方法时,会话的新实例被创建,并且将一唯一标识符与该会话实例相关联,以便于管理多个同时发生的会话。
48.如权利要求46所述的物品,其中当在运行时调用已声明为继续方法或结束方法的方法时,获得一唯一标识符并且使用该唯一标识符来访问会话的对应实例。
49.如权利要求48所述的物品,其中所述唯一标识符是由客户端提供的。
50.如权利要求48所述的物品,其中当在运行时调用已声明为结束方法的方法时,所述会话的对应实例在由Web服务逻辑处理之后被销毁。
51.如权利要求45所述的物品,其中所述一个或多个声明性注释向所述编译器表明已标识的回调方法是否被缓冲,使得所述编译器实例化一个或多个队列来临时存储一个或多个异步响应,以便在客户端能够接收所述响应时,将所述响应递送到客户端。
52.一种制造物品包括在其中存储有多条编程指令的存储介质,这些编程指令被设计用来对设备进行编程以便向客户端返回异步响应,当执行这些编程指令时使所述设备能够进行如下操作标识与客户端相关联的回调接口;标识已声明用于实现所述回调接口的成员变量;生成实现所述回调接口的代理对象;以及将所述代理对象指派给成员变量。
53.如权利要求52所述的物品,其中所述回调接口内部的一个或多个声明性注释使得编译器生成一个或多个持久组件,来维护与已标识的成员变量相关的会话状态。
54.一种制造物品包括在其中存储有多条编程指令的存储介质,这些编程指令被设计用来对设备进行编程以便实现异步Web服务,当执行这些编程指令时使所述设备能够进行如下操作接收来自于客户端的消息,该客户端请求应调用的Web服务方法;解析所述消息,以便除了标识回调地址之外,还标识所请求的Web服务方法,所述回调地址表明客户端正在侦听来自于Web服务的回调时所处的位置;存储与先前生成的代理对象相关联的回调地址;以及调用所请求的Web服务方法。
55.如权利要求54所述的物品,其中所述编程指令进一步使所述设备能够进行如下操作识别由客户端提供的实例标识符,所述实例标识符表明正在侦听来自于Web服务的回调的客户端的特定实例;以及存储与所述回调地址及代理对象相关联的所述实例标识符。
56.如权利要求55所述的物品,其中所述回调地址和实例标识符中的至少之一被封装在一条或多条请求消息中。
57.如权利要求55所述的物品,其中所述实例标识符被嵌入在对话标识符内,所述对话标识符用来访问客户端与Web服务之间会话的对应实例。
58.如权利要求56所述的物品,其中所述回调地址与实例标识符中的至少之一被封装在一个或多个SOAP消息首部中。
59.如权利要求55所述的物品,其中所述实例标识符是GUID。
60.如权利要求54所述的物品,其中使所述设备调用所请求的Web服务的所述编程指令进一步使所述设备能够进行如下操作从所述消息中析取数据表示语言元素;将所述数据表示语言元素映射到程序设计语言对象;调用所请求的Web服务方法,所述Web服务方法包括将程序设计语言对象作为参数传递给所述Web服务方法;将Web服务方法所返回的程序设计语言对象映射到代表性数据表示语言元素;根据在生成所述请求的消息的过程中客户端所使用的一个或多个协议,将所述代表性数据表示语言元素打包;以及依照在将所述消息发送到Web服务的过程中客户端所使用的一个或多个协议,将打包后的数据表示元素发送到客户端。
61.如权利要求55所述的物品,其中所述编程指令还使所述设备能通过调用先前利用已声明的成员变量所生成的代理对象的方法,响应所述消息生成到客户端的异步响应,其中调用包括将程序设计语言对象作为参数传递给所述方法,将所述程序设计语言对象和方法调用映射到代表性数据表示语言元素;将代表性数据表示语言元素和回调实例标识符打包成异步响应消息,以及依照在将原始请求消息发送到Web服务的过程中客户端所使用的一个或多个协议,将所述异步响应消息发送到位于回调地址处的客户端。
62.一种制造物品包括在其中存储有多条编程指令的存储介质,当执行这些编程指令时提供图形接口,以便于在过程程序设计环境内规定异步Web服务,包括标识将被用来与所述异步Web服务相交互的成员变量;以及提供与所述成员变量相关联的方法,该方法具有签名并且包含用于接收来自所述异步Web服务的所述回调的逻辑。
63.如权利要求62所述的物品,其中所述方法是由开发人员人工提供的。
64.如权利要求62所述的物品,其中所述方法签名是由集成式开发环境、根据规定的服务描述文件提供的,所述服务描述文件包含对所述回调的声明。
65.如权利要求62所述的物品,其中利用方法命名惯例,将所述方法与所述成员变量相关联,所述方法命名惯例使用所述成员变量名和所述回调名。
66.如权利要求62所述的物品,其中所述编程指令进一步便于规定与所述成员变量相关联的一个或多个声明性注释,从而使得编译器生成一个或多个持久组件,来维护与异步Web服务相关的会话状态。
67.如权利要求66所述的物品,其中所述一个或多个声明性注释是在源代码内加以规定的。
68.如权利要求66所述的物品,其中所述一个或多个声明性注释是在源代码外加以规定的。
69.如权利要求66所述的物品,其中所述一个或多个声明性注释是由开发人员人工规定的。
70.如权利要求66所述的物品,其中所述一个或多个声明性注释是由集成式开发环境、根据开发人员所提供的输入自动规定的。
71.如权利要求62所述的物品,其中来自于外部Web服务的异步响应被传递给与所述成员变量相关联的所述方法。
72.一种制造物品包括在其中存储有多条编程指令的存储介质,这些编程指令被设计用来对所述设备进行编程以便实现异步Web服务,当执行这些编程指令时使所述设备能够进行如下操作利用先前由编译器、根据与外部Web服务相关联的服务描述文件所生成的代理对象,来生成对外部Web服务的请求,其中所述请求包括回调地址,该回调地址用于标识所述外部Web服务应该将响应返回到的位置;利用一个或多个传输协议,将所述请求作为请求消息发送给外部Web服务;以及接收来自于所述外部Web服务的异步响应。
73.如权利要求72所述的物品,其中所述回调地址包括代理对象标识符。
74.如权利要求72所述的物品,其中所述回调地址包含在请求消息的一个或多个首部内。
75.如权利要求74所述的物品,其中所述请求消息是基于SOAP的消息。
76.如权利要求72所述的物品,其中所述回调地址包括URL,该URL标识Web服务正在侦听来自于外部Web服务的响应时所处的位置。
77.如权利要求72所述的物品,其中所述请求进一步包括一回调实例标识符,该回调实例标识符表示请求Web服务的具体实例,一异步响应将被路由至所述请求Web服务。
78.如权利要求77所述的物品,其中所述回调实例标识符包含在所述请求消息的一个或多个首部内。
79.如权利要求78所述的物品,其中所述请求消息是基于SOAP的消息。
80.一种制造物品包括在其中存储有多条编程指令的存储介质,这些编程指令被设计用来对所述设备进行编程以便实现异步Web服务,当执行这些编程指令时使所述设备能够进行如下操作接收用于标识回调地址、回调方法和代理对象标识符的消息;从消息中析取代理对象标识符;至少部分地根据代理对象标识符和回调方法,来确定将被调用的方法;以及将请求路由至将被调用的方法。
81.如权利要求80所述的物品,其中所述回调地址包括URL,该URL表明Web服务侦听来自于外部Web服务的回调时所处的位置。
82.如权利要求80所述的物品,其中使所述设备能确定将被调用的方法的所述编程指令进一步包括使所述设备能将与回调方法相关联的名称附加于代理对象标识符的编程指令。
83.如权利要求80所述的物品,其中所述消息还标识一回调实例标识符。
84.如权利要求83所述的物品,其中使所述设备能够进行路由的所述编程指令进一步使所设备能够进行如下操作至少部分地根据该回调实例标识符来识别一回调实例;以及将该请求路由至与所识别的回调实例相关联的方法。
全文摘要
描述了一种用于异步Web服务(104)的基于注释的开发平台。在一个实施例中,开发人员采用用声明性注释扩充的标准程序设计语言来表示由Web服务提供的逻辑,所述声明性注释规定用于将那个逻辑扩展为异步Web服务(104)的首选。在编译时,增强式编译器(506)分析已注释的源文件(502),并且自动生成将其功能作为异步Web服务(104)示出所需的机制(508、509、510)。
文档编号G06F9/45GK1552029SQ02817205
公开日2004年12月1日 申请日期2002年6月28日 优先权日2001年7月2日
发明者D·鲍三世, A·博世沃思, G·S·布尔德, R·A·查维滋, K·W·马文, D 鲍三世, 布尔德, 查维滋, 牢炙, 马文 申请人:Bea系统公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1