发明内容
本发明的目的在于:提供一种基于反向通知的服务流程执行省时方法,能够最大限度的缩短计算机网络等待输入的阻塞时间,提高Web服务流程的执行时间和所占用资源的使用效率。
为实现上述目的,本发明可采取下述技术方案:
本发明一种基于反向通知的服务流程执行省时方法,包括下列步骤:
步骤一:扩展定义Web服务的输出操作属性
在原有的计算机Web服务定义中,为Web服务的输出扩展定义一个时间变量,用以表示该输出的阻塞时间,该阻塞时间是由Web服务本身属性决定的输出阻塞时间;
步骤二:定义Web服务间输入输出依赖关系
在Web服务流程描述文件中,通过在定义文件中增加标签模块,每个标签包含一组输入输出对,定义在后Web服务的输入与在前Web服务的输出之间的依赖关系,用于Web服务流程在执行过程中,判断Web服务是否需要放弃对在前Web服务输入的等待;
步骤三:建立反向通知操作
Web服务引擎获得在前Web服务与在后Web服务的输入输出依赖关系,先执行在前Web服务,再执行在后Web服务,根据在后Web服务的内部逻辑状态,在存在状态分支的情况下,比较到达结束状态时间与Web服务总的输入等待时间的大小,若到达结束状态时间大于或等于Web服务总的输入等待时间,则不执行反向通知操作,若到达结束状态时间小于Web服务总的输入等待时间,则执行反向通知操作,通知在前Web服务放弃耗时的输出。
步骤一所述的扩展定义Web服务的输出操作属性为:在原有的Web服务描述文件WSDL标准中,为output属性扩展定义一个时间变量:blockTime,值类型为long;步骤二所述的定义Web服务间输入输出依赖关系为:采用Web服务组合流程描述标准BPEL进行扩展定义,增加一个名为dependents的bpel标签模块,每个dependent标签包含一组输入输出对,input标签表示输入,name属性表示输入的名称,belongto属性表示该输入属于哪个服务,output标签表示输出,name属性表示输出的名称,belongto属性表示该输出属于哪个服务,输入与输出间为多对多对应关系;步骤三所述的建立反向通知机制为:在前Web服务的部分输出作为在后Web服务的部分输入,定义在前Web服务的输出集合为OA={O1,O2,O3,……,On},在后Web服务的输入集合为IB={I1,I2,I3,……,In},在后Web服务等待所有输入的时间为Max(IB),在前Web服务中的执行时间至少为Max(OA)。
本发明所述的基于反向通知的服务流程执行省时方法,由于采用上述技术方案,在原有的计算机Web服务定义中,扩展定义了Web服务的输出操作属性,在服务流程描述文件中定义了服务间输入输出依赖关系,并建立了Web服务流程执行引擎执行反向通知的操作,与现有技术相比,在计算机Web服务中使用本发明的方法,能够通知在前Web服务放弃耗时的输出,从而缩短计算机Web服务流程执行的时间,提高Web服务所占用计算机资源的使用效率。
具体实施方式
一种基于反向通知的服务流程执行省时方法,包括下列步骤:
步骤一,扩展定义Web服务的输出操作属性
原有的计算机Web服务描述文件WSDL标准中,Web服务的operation属性分为input和output两种操作。在本实施例中,为output属性扩展定义个一个时间变量:blockTime,表示该输出的阻塞时间,该阻塞时间是由Web服务本身属性决定的输出阻塞时间,并不包含网络延迟等客观网络条件因素。由于Web服务的执行往往是个长时的过程,因此对该时间变量的单位定位100毫秒(1个时间单位,下述文字中表示时间的变量,单位为1个时间单位)。
<operation name=″A″>
<input message=″aRequest″name=″aRequest″/>
<output message=″aResponse″name=″aResponse″blockTime=1000/>
</operation>
本实施例说明操作Web服务A的输出阻塞时间为1000个时间单位,即100秒。
步骤二:定义Web服务间输入输出依赖关系
Web服务组合技术发展至今,已经出现了多种方法和标准的描述规范,在本实施例中,采用目前最流行的Web服务组合流程描述标准BPEL(Business ProcessExecution Language),进行扩展定义。增加一个名为dependents的bpel标签定义,
<bpel:dependents>
<bpel:dependent>
<input name=″I1″belongto=″B″/>
<output name=″O1″belongto=″A″/>
</bpel:dependent>
</bpel:dependents>
本实施例定义了流程中在后Web服务B的输入I1与在前Web服务A的输出O1的依赖关系。流程中Web服务间的输入与输出关系依赖是多对多的关系。每个dependent标签包含一组输入输出对,input标签表示输入,name属性表示输入的名称,belongto属性表示该输入属于哪个Web服务,output标签表示输出,name属性表示输出的名称,belongto属性表示该输出属于哪个Web服务,输入与输出间为多对多对应关系;
步骤三:建立反向通知操作
Web服务A的部分输出作为Web服务B的部分输入。定义Web服务A的输出集合为OA={O1,O2,O3,……,On},Web服务B的输入集合为IB={I1,I2,I3,……,In},那么假定Web服务A的输出{O1,O2,O3,O4}分别一一对应Web服务B的输入{I1,I2,I3,I4}。在Web服务A的定义中,已经对输出集合{O1,O2,O3,O4}的输出阻塞时间进行了扩展定义。如下所示(只列出了对Web服务A中O1,O2,O3,O4的输出定义)
<output message=″a1″name=″O1″blockTime=20/>
<output message=″a2″name=″O2″blockTime=100/>
<output message=″a3″name=″O3″blockTime=60/>
<output message=″a4″name=″O4″blockTime=20/>
在Web服务流程定义过程中,已经对Web服务B的输入和Web服务A的输出做了依赖关系扩展定义。
<bpel:dependents>
<bpel:dependent>
<input name=″I1″belongto=″B″/>
<output name=″O1″belongto=″A″/>
</bpel:dependent>
<bpel:dependent>
<input name=″I2″belongto=″B″/>
<output name=″O2″belongto=″A″/>
</bpel:dependent>
<bpel:dependent>
<input name=″I3″belongto=″B″/>
<output name=″O3″belongto=″A″/>
</bpel:dependent>
<bpel:dependent>
<input name=″I4″belongto=″B″/>
<output name=″O4″belongto=″A″/>
</bpel:dependent>
</bpel:dependents>
通过定义可知,Web服务B中{I1,I2,I3,I4}的输入阻塞时间为T={20,100,60,20}。因此Web服务B等待所有输入的时间为Max(T)=100。Web服务A中{O1,O2,O3,O4}的执行时间至少为Max(T(O1),T(O2),T(O3),T(O4))=100。
本实施例中Web服务B的执行过程中,其内部的逻辑状态转换及转换过程中涉及的输入如图1表示。从开始状态,进过对输入I1进行处理,转换到状态1。从状态1到结束状态的转换可以通过两条路径,路径①:通过处理I4直接到达结束状态;路径②通过处理I2,到达状态2,再处理I3,到达结束状态。通过路径①到达Web服务结束状态,Web服务执行时间为Max(T(I1),T(I4))=20,通过路径①到达Web服务结束状态,Web服务执行时间为Max(T(I1),T(I2),T(I3),T(I4))=100。
流程执行引擎根据Web服务B在状态1到达结束状态的路径选择,决定是否执行反向通知Web服务A的动作。情况(1):Web服务B通过路径①到达结束状态。Web服务执行时间Max(T(I1),T(I4))=20<Web服务等待输入时间100,则执行反向通知动作,通知A放弃输出{O2,O3}。使得Web服务A对{O1,O2,O3,O4}的执行时间从100降低到Max(T(O1),T(O4))=20,将Web服务B的对输入的等待时间从100缩短到Max(T(I1),T(I4))=20,从而大幅缩短了Web服务组合流程执行Web服务A和Web服务B的时间。情况(2):Web服务B通过路径②到达结束状态。Web服务执行时间Max(T(I1),T(I2),T(I3),T(I4))=100>=Web服务等待输入时间100,时间上没有缩短,因此引擎无需执行反向通知的操作。
若Web服务流程中,存在大量Web服务的内部逻辑状态转换具有分支的情况,则本发明对流程执行时间具有良好的优化效果。从开始状态,进过对输入I1进行处理,转换到状态1。从状态1到结束状态的转换可以通过两条路径,路径①:通过处理I4直接到达结束状态;路径②通过处理I2,到达状态2,再处理I3,到达结束状态。通过路径①到达Web服务结束状态,Web服务执行时间为Max(T(I1),T(I4))=20,通过路径①到达Web服务结束状态,Web服务执行时间为Max(T(I1),T(I2),T(I3),T(I4))=100。
流程执行引擎根据Web服务B在状态1到达结束状态的路径选择,决定是否执行反向通知Web服务A的动作。情况(1):Web服务B通过路径①到达结束状态。Web服务执行时间Max(T(I1),T(I4))=20<Web服务等待输入时间100,则执行反向通知动作,通知A放弃输出{O2,O3}。使得Web服务A对{O1,O2,O3,O4}的执行时间从100降低到Max(T(O1),T(O4))=20,将Web服务B的对输入的等待时间从100缩短到Max(T(I1),T(I4))=20,从而大幅缩短了Web服务组合流程执行Web服务A和Web服务B的时间。情况(2):Web服务B通过路径②到达结束状态。Web服务执行时间Max(T(I1),T(I2),T(I3),T(I4))=100>=Web服务等待输入时间100,时间上没有缩短,因此引擎无需执行反向通知的操作。
若Web服务流程中,存在大量Web服务的内部逻辑状态转换具有分支的情况,则本发明对流程执行时间具有良好的优化效果。