CN101599010A - 流程处理方法和装置 - Google Patents

流程处理方法和装置 Download PDF

Info

Publication number
CN101599010A
CN101599010A CNA2008101093794A CN200810109379A CN101599010A CN 101599010 A CN101599010 A CN 101599010A CN A2008101093794 A CNA2008101093794 A CN A2008101093794A CN 200810109379 A CN200810109379 A CN 200810109379A CN 101599010 A CN101599010 A CN 101599010A
Authority
CN
China
Prior art keywords
flow
activity
program segment
note
performing model
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2008101093794A
Other languages
English (en)
Inventor
王斌
黄鹤远
徐景民
朱俊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to CNA2008101093794A priority Critical patent/CN101599010A/zh
Publication of CN101599010A publication Critical patent/CN101599010A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明提出一种流程处理方法,包括:获取已添加注解的活动的程序段,其中注解与流程中的活动相关;从获取的已添加注解的活动的程序段中提取流程逻辑并形成流程定义;根据形成的流程定义创建流程执行模型;按照流程执行模型调用已添加注解的所述活动的程序段来执行相应的流程。本发明还涉及使用该方法的流程处理装置。通过使用编程语言和对于该编程语言的构造的注解来表示编制逻辑,从而减轻了研发者学习新语言的负担,而同时对于整个系统来说,由于不存在不同的运行上下文,所以性能能够得以保证。

Description

流程处理方法和装置
技术领域
本发明涉及用于流程处理方法和装置,尤其涉及将服务组合进面向服务的架构(Service-Oriented Architectures,以下简称为SOA)中的流程处理方法和装置。
背景技术
如今,软件自动化已经允许以几乎无人的方式来处理业务运作。例如,在没有人工干涉的情况下,完成接收Web订单、评估收费,并交付产品等。因此对于商家来说,商业处理的操作已经更加快捷且更加便宜。而与此同时,随着事务变得日益复杂,并且在对客户最终交付时,可能涉及许多公司(例如,在一个普通的光缆电信服务中,客户从电信厂商那里购买卫星频道接入、宽带因特网、蜂窝服务,及因特网游戏预定。该厂商则依次与其他厂商签署协议,提供每一种服务并且分享最终付款的一部分),业务运作现在可能会涉及许多独立的软件系统,以分布式的异步方式进行交互。
面向服务的架构(SOA)的引入为这种互操作性带来了更高的复杂性。SOA主要的应用场合在于解决在Internet环境下的不同面业应用之间的业务集成问题。在基于SOA的系统中,服务是以松散耦合且独立于平台的方式由一个系统提供给另一个系统的(经常来自多个竞争的公司)。这些服务可以提供任意层次的业务功能,从订单管理,到记账,到存货清单,到执行。通过将一组服务收集到一起,就可能建立一个任意复杂的业务运作流程,所有的都跨越分布式的网络无缝地交互。SOA灵活性(这样服务可以快速地换入换出)的代价是组织并控制业务活动的额外费用。每个服务只提供整个业务事务的一小部分,结果是一个操作进入另一个的处理中(例如订单执行和记账)。因此,在将服务组合进商业处理的过程中,服务编制是至关重要的。
目前进行服务编制所使用的编制逻辑通常延伸在系统之外并且使用例如业务流程执行语言(Business Process Execution Language,以下简称为BPEL)或是Web服务编排接口(Web Service ChoregraphyInterface,以下简称为WSCI)这一类的中立于编程语言的脚本。使用这种脚本的优势在于任何支持该种脚本的编制引擎都可以执行这种编制逻辑。
WS-BPEL是当前基于流程的Web服务编排(ServiceChoreography)最常使用的技术,其提供了一个描述基于流程及其合作伙伴(partner)之间Web服务交互的业务流程的行为模型,尤其善于支持与业务伙伴的长期会话。WS-BPEL依赖于下列基于XML的规范:WSDL 1.1、XML Schema 1.0、XPath 1.0、XSLT 1.0和Infoset。其中,WSDL对WS-BPEL的影响最大。WS-BPEL的流程模型位于WSDL 1.1所定义的服务模型的顶层。在WSDL中,不仅定义了服务允许的各种传输消息类型和操作,还通过定义服务链接类型描述服务间的依赖关系。BPEL定义了WSDL操作如何被编排在一起以满足业务流程,在BPEL中,直接引用WSDL中定义的操作,并通过Web服务接口提供流程实例。相对于其伙伴和资源行为及交互的描述,流程和其相关的合作伙伴都被暴露成WSDL服务,所有的外部资源和伙伴也被表示为WSDL服务。业务流程则定义了一个流程实例和它的伙伴之间应该怎样协同交互。由此,WS-BPEL流程定义提供或使用一个或多个WSDL服务。这样,WS-BPEL提供序列和规则来描述伙伴服务被调用的顺序,可以实现非常轻便的松耦合架构,来配合企业业务的灵活变更从而轻松实现服务间的编排。
WS-BPEL已经成为了业内标准,但是,很显然的是,XML语言和开发者用以开发系统的语言并不相同,后者通常是Java或是C#语言等等。这就需要开发者对这两种语言都能够熟练掌握并且可以处理由此引发的例如变量映射之类的调解问题。这不仅延长了研发者为了进行研发而学习必须掌握的语言的学习时间,同时由于BPEL中的流程变量是XML定义的,而XML类型变量总是不能很好地映射到JAVA数据类型,由此而产生的数据类型映射的瑕疵和低效会给运行时间等性能带来不良的影响。
因此,针对这种不足,引入了BPELJ语言,其作为BPEL与Java程序设计语言的结合使得可以一起使用这两种语言来构建业务流程应用程序。为了使BPEL和Java语言可以方便地结合,BPELJ对BPEL进行了少量的改变,同时也作了一些扩展。BPELJ通过允许Java代码段,称为Java代码片段(片段是一些表达式或小的Java代码块,它可以用于分支条件、变量初始化、Web服务消息的准备以及业务功能的逻辑)包含在BPEL流程定义中来启用Java和BPEL的合作。为了使得处理使用Java资源而不是Web服务,BPEL实现了创建其接口使用Java接口定义的伙伴链接类型,而不是使用WSDL端口类型。BPELJ使得通过Java代码完成业务流程的计算工作成为可能,同时也使通过BPEL编排与J2EE组件长期的交互成为可能。
然而,作为一种混合语言,BPELJ仍然需要研发者同时掌握BPEL和Java语言,此外,XML Schema或是WSDL消息定义的变量需要映射到Java变量并且反之亦然,而由于XML定义的数据类型不能总是保证能够映射到Java数据类型,因此数据类型的映射仍然是低效的,并且编程人员在开发Java代码片段中因为两种上下文的切换和寻求映射而会出现中断或是停顿的现象。而如上面曾经所提到的,为了使BPEL和Java语言可以方便地结合,BPELJ对BPEL进行了少量的改变,而如果这些更改中的任何一个都不被接受,那么BPELJ将使用BPEL现有的特征,这可能会使它稍微有些笨拙。此外,由于嵌入的Java片段很难再使用,因此将Java片段混合到用于早期例如JSP的HTML中并不是很理想的设计。
而无论是BPEL还是BPELJ,由于在运行时编制逻辑通常都是由编制引擎来解译的,因此当存在多个编制脚本同时运行时,会引起性能降低的问题。为了避免运行时的解译问题,Web sphere处理服务器(WebSphere Process Server,即WPS)产生了大量的Java类并且在部署时将它们汇编到EJB(Enterprise JavaBean)中,但是在解决了运行期间性能损失的问题的同时,又产生了部署时间的消耗问题,同时也增加了研发者的调试成本。
发明内容
为了克服现有技术中存在的局限性,本发明提出一种流程处理方法和装置,特别是基于注解的用于流程的服务编制的方法和装置,其通过使用编程语言和对于该编程语言的构造的简单注解来表示编制逻辑,从而减轻了研发者学习新语言的负担,而同时对于整个系统来说,由于不存在不同的运行上下文,所以性能能够得以保证。
根据本发明的一方面,提供一种流程处理方法,包括:获取已添加注解的活动的程序段,其中注解与流程中的活动相关;从获取的已添加注解的活动的程序段中提取流程逻辑并形成流程定义;根据形成的流程定义创建流程执行模型;按照流程执行模型调用已添加注解的所述活动的程序段来执行相应的流程。
根据本发明的另一方面,提供一种流程处理装置。该装置包括:流程注解获取器,用于获取已添加注解的活动的程序段,其中注解与流程中的活动相关;注解分析器,用于从获取的已添加注解的活动的程序段中提取流程逻辑并形成流程定义;流程执行模型生成器,用于根据形成的流程定义创建流程执行模型;以及活动执行器,用于按照存储的流程执行模型调用已添加注解的所述活动的程序段来执行相应的流程。
根据本发明的流程处理方法,通过利用宿主语言原有的注解,将与活动相关的注解添加到相应活动的程序段之前,从而对这些经过注解的活动的程序段中的服务进行调用。相较于现有的基于XML的流程服务编制方法,本发明的基于注解的服务编制方法所需要的技术准备仅仅是宿主语言,也即编程语言,而从流程中提取流程逻辑也非常方便有效,此外,由于本发明的服务编制方法将流程注解与相应的宿主语言部件(artifact)相关联,例如与类方法以及类成员相关联,从而使得其有别于一些在Java类头定义流程逻辑的BPELJ的变型体,程序文件的指定能够更为简单地保持流程逻辑和服务之间的一致性。同时由于本发明的服务编制方法的流程注解和宿主语言部件之间的紧密关联从而使得其中的执行实体能够直接被提取,因此程序文件的执行也较BPELJ的变型体而言更为有效。
结合附图阅读本发明实施方式的详细描述后,本发明的其他特点和优点将变得更加清楚。
附图说明
为了对本发明实施方式的特征和优点进行详细说明,将参照以下附图。如果可能的话,在附图和描述中使用相同或者类似的参考标号以指代相同或者类似的部分。附图中:
图1示出了根据本发明一个实施方式的流程处理方法的流程图;
图2示意性地示出了根据本发明一个实施方式的使用Java注解来定义服务流程的方法;
图3示意性示出了根据本发明一个实施方式的从被注解的程序文件中创建流程执行模型的流程图;
图4示意性地示出了根据本发明一个实施方式的流程执行处理的流程图;
图5示出了根据本发明一个实施方式的流程处理系统的方框图;
图6所示为根据本发明一个实施方法的处理流程的应用情况。
具体实施方式
正如上文所述,即使应用了作为一种混合语言的BPELJ,仍然需要研发者同时掌握BPEL和Java语言,同时由于在运行时编制逻辑通常都是由编制引擎来解译的,因此当存在多个编制脚本同时运行时,会引起性能降低的问题。鉴于此,本发明提出的基于注解的流程处理方法,其中仅仅需要使用宿主语言,例如Java,而通过将宿主语言中的与活动相关的注解添加到对应活动的程序段(简称为“活动方法(activity method)”)中,并且通过调用注解后的活动方法中的服务,实现了简单有效的服务编制。
在以下的描述中,我们使用Sun Microsystems Inc.在2005年引入的Java语言中的注解来对实施例进行描述,应当理解的是,这种举例仅出于说明的目的,而不会对本发明的范围造成任何限制。
为了更好地说明本发明,首先对Java语言中的注解进行说明。
注解(Annotation)是J2SE 5.0引入的新功能。简单地说,它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。J2SE包含内置注解,还支持用户编写的定制注解。
在J2SE 5.0中,注解是以‘@注解名’在代码中存在的,例如:J2SE 5.0内置的注解:@Override、@Deprecated;有的注解还可以添加一些参数值,例如:@SuppressWarnings(value=″unchecked″);对于这种只有一个参数,且参数名为value的注解,我们在使用时可以简写为:@SuppressWarnings(″unchecked″)。根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制编程实现对这些元数据的访问。
对本发明方法中的注解类别进行简要说明。在本发明中,有三种类别的注解:1)流程变量注解,对于Java中的各种变量,我们必须指出在流程中使用哪些变量,因此在处理过程中需要保存所使用的变量。此外,还需要建立外部消息和流程实例之间的关联,因此在本方法中引入@Variable(变量)和@CorrelationSet(关联集);2)流程活动注解,通过流程活动注解可以定义各种流程活动,例如调用、接收等等,相应地,引入了@InvokeActivity(调用活动)和@ReceiveActivity(接收活动)等等,除此之外,还引入了流程控制,例如并行、合并以及选择等;3)服务绑定注解,由于在流程中所引用的外部服务也需要被清楚地指明,否则程序员需要例如通过进行Web服务调用来进行指明,因此出于此目的,在本发明方法中也引入了@Reference(参考)注解。
为了方便以下的说明,下面对本发明中所使用的一些注解进行更为详细的定义和描述:
符号[M]意味着该注解是关于Java方法的注解,而符号[F]意味着该注解是关于Java字段的注解。
1)变量注解:
-[F]@Variable(name=String)
@Variable基于Java字段进行注解,指示着该字段将在流程中使用,而“name”属性缺省与字段的名称相同。
-[F]@CorrelationSet(name=String,fields=String[])
@CorrelationSet用以指示变量集和流程实例之间的联系。当从外部进行调用时,参数将被用于寻找相对应的流程实例。
2)活动注解:
-[M]@Start(name=String,post=String)
@Start注解用以指示流程中的第一活动,其中涉及两个属性。“name”属性代表了活动的名称,其缺省值为空值,而所注解的方法名称即为活动名称,而“post”属性通过随后的活动的名称指示在所述第一活动之后接着的活动。
[M]@End(name=String)
@End注解用以指示流程的结束,当被注解的方法被调用之后,该流程实例即结束。
[M]@InvokeActivity(name=String,pre=String[],post=String)
@InvokeActivity注解用以指示其后跟随的方法,该方法调用了所引用的服务或是应用程序。
[M]@ReceiveActivity(name=String,pre=String[],post=String)
@ReceiveActivity注解用以指示流程将等待一消息,该消息的名称在其“pre”属性中。
[M]@AndSplit(name=String,post=String[])
@AndSplit注解用以指示流程将分支为多个并行活动从而在所注解的方法之后并行执行之后的活动。而“post”属性是字符串集合,包含了所有随后的活动的名称。
[M]@AndJoin(name=String,pre=String[],post=String)
@AndJoin注解被用以同步之前并行的活动。所注解的方法将被处理为加入活动从而等待之前分支的活动。而“post”属性指示了随后的活动
[M]@OrSplit(name=String,post=String[])
@OrSplit注解被用以指示将会有排他的选择,引擎将会选择一个分支继续执行,而所有的候选活动都包含在“post”属性中。
[M]@OrJoin(name=String,pre=String[],post=String)
@OrJoin注解被用以合并之前的流程分支,而“pre”属性将包含所有之前的活动名称。
[M]@Message(name=String)
@Message注解被用以作为收听者(接收信息的接收者),当从外部伙伴调用了经过注解的方法后,将会自动执行相关的接收活动,其中所谓相关的接收活动即为在ReceiveActvity的“pre”属性中显示出来的名称。
3)服务绑定注解:
[F,M]@Reference(name=String,target=String)
@Reference注解可以在Java字段或是Java方法上进行注解。其目的在于要求处理引擎寻找或是插入相应的服务实例。
请注意,上述注解名(例如,AndSplit、Reference等等)和对应的属性参数(例如,name、target、post等等)都是可以根据具体需要而定制的。
图1示出了根据本发明一个实施方式的流程处理方法的流程图。
图1中所示的流程处理方法用于处理已经添加有根据上文所述的流程注解的程序文件。在本实施方式中,编程语言优选为Java语言。此外,优选地,在本实施方式中,所有与活动相关的注解被添加到相应的活动方法之前。活动注解应当具有名称用以标识该活动,还应当具有各个活动之间的关系,其被用以描述活动执行上的先后关系。此外,与变量和服务索引相关的注解应当被添加到字段或是字段的取得/设置方法之前。
在步骤S101中,从添加有注解的程序文件中获取已经添加注解的活动的程序段。每个程序段的注解表明该程序段与其他程序段之间的流程逻辑。
在步骤S102中,在引导加载的过程中,注解分析器负责从获取的已添加注解的活动的程序段中提取流程逻辑并且形成流程定义。此处,已添加注解的活动的程序段可以是经过注解的Java类。在此,流程逻辑是指对应于活动的程序段之间的逻辑关系。上文介绍的注解中的不同注解名代表不同的逻辑关系。很显然,由于例如Java语言的宿主语言所提供的注解支持,从已添加注解的活动的程序段中提取流程逻辑是非常容易且快速的。
在步骤S103中,由流程执行模型生成器根据在步骤S102中形成的流程定义创建流程执行模型,并且将该流程执行模型注册到流程执行模型注册库,这些创建的流程执行模型通过例如Java类的处理定义信息来进行索引;
在步骤S104中,由活动执行器根据所创建的流程执行模型调用所注解的方法来执行相应的流程活动。
图2示出了根据本发明一个实施方法的使用Java注解来编制服务流程的方法。如图2所示,所讨论的具体应用是一个简单的预订酒店和车辆的流程。图2中左侧所示为应用本发明的方法用Java注解定义的流程,右侧为相对应的具体应用的流程图。每个注解的结构为@annotation_name(name=string1[,post=string2]),其中name表示当前活动的名称,“post”表示当前活动的后续活动的名称,annuotation_name为注解名,其表示括号中当前活动与后续活动之间的关系,即,流程逻辑。可以看出,在Java注解定义的流程中,将具体应用的流程图中的每一个活动用注解的Java方法表示出,而在注解的属性中,对活动的名称以及其与其它活动的关系进行了描述。例如,使用“name”属性来定义活动方法的名称,如:
name=“check”定义了“查询信用”活动的活动方法名称为“check”;
name=“decision”定义了“确定”活动的活动方法名称为“decision”;
name=“log”定义了“记录”活动的活动方法名称为“log”;
name=“hotel”定义了“预留酒店”活动的活动方法名称为“hotel”;
name=“car”定义了“预留车辆”活动的活动方法名称为“car”;
name=“summary”定义了“汇总”活动的活动方法名称为“summary”;
name=“reply”定义了“回复”活动的活动方法名称为“reply”;
name=“reject”定义了“拒绝”活动的活动方法名称为“reject”;等等
使用“post”属性来指示当前活动之后所跟随的活动,使用注解属性表示当前活动与后续活动之间的关系。例如:
@Start(name=“check”,post=“decision”)指示了当前活动“查询信用”之后的活动为“确定”,并且如上文所述,@Start表示“查询信用”活动是该流程中的第一活动;
@OrSplit(name=“decision”,post={“log”,“reject”})指示了当前活动“确定”之后,根据“确定”的结果,转到“记录”活动或“拒绝”活动。@OrSplit表示多个后续活动是根据具体情况择一选择的流程逻辑。
在注解之后通常接着该注解中所提到的当前活动的具体内容或程序段。例如,在注解@OrSplit(name=“decision”,post={“log”,“reject”})之后接着:private String checkCredit(),其表示“decision(确定)”对应于这个活动具体执行的程序段,其可以是用Java编写的程序段,也可以是调用外部的服务。在执行程序段checkCredit()之后返回判断信用卡是否有效的结果。如果信用卡有效则流程进行到“log”(记录)步骤;如果信用卡无效则流程进行到“reject”(拒绝)步骤。
进行到“log”步骤的情况下,获取活动方法名称为“log”的注解@AndSplit(name=”log”,post={“car”,”hotel”})和相应的程序段log()。从该对该注解名AndSplit的分析可知在“log”步骤之后并行执行预留酒店的步骤“hotel”和预留车辆的步骤“car”。
接着分别获取活动方法名称为“hotel”的注解@InvokeActivity(name=”hotel”,post=”summary”)和相应的程序段rsvHotel(),以及获取活动方法名称为“car”的注解@InvokeActivity(name=”car”,post=”summary”)和相应的程序段rsvCar()。并且并行地调用预留酒店的程序段rsvHotel()和预留车辆的程序段rsvCar()。
基于上述注解获得的流程逻辑是在完成预留车辆和预留酒店的活动之后进入“summary”(汇总)步骤。
如此经过若干步骤之后进入“reply”(回复)步骤。在reply程序段中的注解名为End,这表明整个流程在此结束。
从每个程序段的注解提取的流程逻辑构成如图2右侧所示的整个流程执行模型。按照所提取的流程执行模型依次调用活动方法可以完成整个流程的执行。
可以理解的是,活动之间的关系并不限于跟随的关系,可以使用别的属性来描述活动之间的联系,例如用“pre”表示当前活动之前活动。
图3示出了根据本发明一个实施方法的从被注解的程序文件中创建流程执行模型的流程图。图3所示的流程对应于图1中的步骤S102和步骤S103的细分步骤,其中图3中的步骤S301-S304对应于图1中的步骤S102,图3中的步骤S305-S307对应于图1中的步骤S103。
在步骤S301中,程序员通过注册API将描述流程的程序注册到引擎,在此处,一个类对应一个流程。
在步骤S302中,注解分析器提取每个活动方法的注解,并且通过注解类型从注解处理器注册库中寻找相应的注解处理器,在此处,一种注解对应着一个注解处理器,这是一个可扩展的设计,以利于未来的扩展,通过这种设计,可以方便地向系统添加其它的注解。
在步骤S303中,注解处理器读取注解的属性,例如上面所提到的注解名以及“name”或是“post”等等参数,并且分别将所提取的信息添加到流程定义中;
在步骤S304中,在完成了步骤S303中所有的流程注解的处理之后,引擎就完成了所有的流程定义;
在步骤S305中,流程执行模型生成器根据流程定义创建流程执行模型作为运行期间处理控制器,例如基于Petri-Net的模型或是基于状态机的模型,流程执行模型生成器还从例如Java类的部件中提取每个活动方法;
在步骤S306中,将新创建的流程执行模型存储在流程执行模型注册库中,通过例如Java类的处理定义信息对其进行索引;
在步骤S307中,将每一个活动方法存储在活动方法注册库中,通过这些活动方法的名称对其进行索引,其中步骤S307与步骤S306和/或步骤S307之间的执行次序可以互换或者与其并行地执行。
举例来说,在图2中的其中一个注解为:
@Orsplit(name=“decision”,post={“log”,“reject”})
在图3的步骤S302中,由注解分析器提取上述注解。并且根据注解名Orsplit查找对应于的注解处理器;
在步骤S303,由所查找的注解处理器对该注解进行出来,提取注解属性,并添加到流程定义中,其中包括由注解名Orsplit所代表的流程逻辑以及由活动名称“decision”、“log”和“reject”所代表的活动方法;
在步骤S304,在对每个注解进行处理之后获得完整的流程定义;
在步骤S305,由流程执行模型生成器从所获得的流程定义中包含的流程逻辑关联起来形成一个流程执行模型,其对应于图2右侧所示的流程图;
在步骤S306,将由流程执行模型生成器所创建的流程执行模型存储在流程执行模型注册库中。
在步骤S307,提取流程定义中的活动方法(即图2右侧流程图中的每个框所对应的程序段或服务),并存储在活动方法注册库中。
可以看出,相较于之前的基于XML的流程注册、解析处理而言,本发明的流程处理方法中的流程注册和解析处理具有几点有益效果:首先无需对冗长的XML文档进行解析,一般情况下,这种解析会花费大量的时间和系统资源,而在本发明中,得益于例如Java语言的宿主语言所提供的注解支持,从经过注解的程序文件中提取流程逻辑是非常容易且快速的,因此效率得到了很大的提高;其次,在基于XML的流程注册和解析处理中,需要产生新的执行语言并且为每一个翻译过的采用XML进行描述的活动进行编译,此外还需要进一步将这些类和部件部署到运行期间容器,例如Enterprise BeanProvider,EJB容器中。而本发明由于采用了编程语言中已有的注解来进行注解,因此无需产生新的执行语言,因此,本发明的流程处理方法可以免去由于产生新的类而带来的额外的工作;最后,在调试一个处理时,需要重复进行很多次注册/解析步骤,如果该步骤花费的时间太多,那么对于研发者的带来的时间代价就会相对而言更大,在本发明的流程处理方法中,注册和解析通过宿主语言的注解来完成,因此,在重复很多次的该步骤上能够有效地节约研发的时间成本。
图4示出了根据本发明一个实施方式的服务流程执行处理的流程图。图4对应于图1中的步骤S104的细分步骤。
在步骤S400中,服务流程执行处理开始。
在步骤S401中,当从外部接收到一个服务调用,引擎为此对话创建一个流程实例;
在步骤S402中,活动调度器从流程执行模型注册库处为每一个流程实例寻找相应的流程执行模型;
在步骤S403中,活动调度器在活动方法注册库中查找用于该流程实例的程序段;
在步骤S404中,活动调度器将每一个活动方法连同其名称一起发放到活动执行器;
在步骤S405中,活动执行器执行活动方法;
在步骤S406中,判断当前的活动是否是处理中的最后一个活动,如果判断结果为否,则处理进行到步骤S407,在该步骤中,如果上一次执行的活动方法具有结果则将该活动的结果返回到活动调度器供后续执行时使用,如果无结果则返回NULL,并且处理返回到步骤S403,活动调度器对剩余的工作进行调度;如果在步骤S407中判断结果为是,则处理进行到步骤S408。
在步骤S408,该服务流程执行处理结束。
图5示出了根据本发明一个实施方式的流程处理系统的方框图。
如图5所示,根据本发明一个方面的流程处理系统500包括四个模块:
流程定义模块501,用以获得流程定义以及注解集合,在本实施方式中,流程定义模块分为两个部分,定义工具5011和注解集合5012。其中定义工具5012可以是作为程序设计员方便使用的一种可视处理编辑器,注解集合5012则提供一些内置的注解;
监视和管理模块502,用以对系统进行监视和管理。其包括有Web控制台和监视管理API,平台管理员可以检查每一个处理实例的运行期间信息或是通过Web控制台发放管理命令,编程者也可以利用监视管理API来掌握处理运行期间信息;
工作客户机503,与大部分的工作流程系统一样,工作客户机提供有客户机API,从而一方面可以询问用户需要进行的事项的清单,这样用户可以查看当时需要进行的工作以进行人工操作,另一方面当用户完成了工作时发送一个消息到引擎;
引擎504,用以完成流程注册和执行功能,其中包含注解获取器5040、注解分析器5041、流程执行模型生成器5042、活动执行器5043、流程执行模型注册库5044、活动调度器5045、注解处理器5046、注解处理器注册库5047以及活动方法注册库5048。
参照上面结合图3和图4所作出的关于流程注册处理和流程执行处理的描述,以下讨论图5所示的流程处理系统的功能。
当程序员通过注册API将流程类注册到引擎后,注解获取器5040提取出每个方法的注解提供给注解分析器5041进行分析;注解分析器5041根据注解类型从注解处理器注册库5047中寻找相应的注解处理器5046,接着注解处理器5046读取注解的属性,例如上面所提到的活动名“name”或是后续活动“post”等等,并且将所分别提取的信息添加到流程定义中,当引擎完成了所有的流程定义后,流程执行模型生成器5042建立流程执行模型作为运行期间处理控制器,并从例如Java类中提取出每个方法,接着,将新创建的流程执行模型存储在流程执行模型注册库5044中,这些流程执行模型通过例如Java类的处理定义信息来对其进行索引。此外,流程执行模型生成器5042还将活动方法抽出来存储在活动方法注册库5048中,通过这些活动方法的名称对其进行索引。通过监视和管理模块502中的监视管理API以及Web控制台可以对引擎的运行期间信息进行查看或是发送管理命令。在完成了流程执行模型注册库以及活动方法注册库5048之后,当从外部接收到一个服务调用(例如客户机503通过客户机API作出的服务调用),引擎为此对话创建一个流程实例,接着,活动调度器5045从流程执行模型注册库5044处为每一个流程实例寻找相应的流程执行模型,流程执行模型负责全部的执行处理,其对活动调用的顺序进行编制。接着,活动调度器5045在活动方法注册库5048中找到流程执行模型中对应的活动方法或程序段,并且提供给活动执行器5043执行;或者活动调度器5045将每一个活动方法连同其名称一起发放到活动执行器5043,收到每一个活动方法之后,活动执行器5043发出针对方法命令的查询,并在活动方法注册库5048中找到该方法命令,当寻找到相应的方法后,活动执行器5043就执行该方法。
图6所示为根据本发明一个实施方法的处理流程的应用情境。
该处理完成的是利用三个搜索引擎进行搜索,之后将搜索结果进行合并的处理。为了更能看出本发明的有益效果,我们分别用纯Java和本发明的流程处理方法进行编制。
利用纯Java进行的编制如下:
public String getSearchResult(String query){
              String result;
              GoogleSearch s1=new GoogleSearch(query);
              BaiduSearch s2=new BaiduSearch(query);
              YahooSearch s3=new YahooSearch(query);
              s1.start();
              s2.start();
              s3.start();
            while(!s1.ready&&!s2.ready&&!s3.ready)
                 nop();
             result=merger.merge(s1.getResult(),s2.getResult(),s3.getResult());
            return result;
}
//Concurrent Activies-1
class GoogleSearch implements Runnable{
          String query=“”;
          String result=“”;
          boolean ready=false;
           public GoogleSearch(String query)
           {
              this.query=query;
           }
           public void run(){
           result=googleSearcher.search(query);
           ready=true;
           }
           public void getResult()
           {return result;}
}
//Concurrent Activies-2
class BaiduSearch implements Runnable{
           String query=“”;
           String result=“”;
           boolean ready=false;
             public BaiduSearch(String query)
             {
                this.query=query;
             }
             public void run(){
             result=baiduSearcher.search(query);
             ready=true;
             }
             public void getResult()
             {return result;}
}
  //Concurrent Activies-3
class YahooSearch implements Runnable{
           String query=“”;
           String result=“”;
           boolean ready=false;
             public YahooSearch(String query)
             {
                this.query=query;
             }
             public void run(){
             result=yahooSearcher.search(query);
             ready=true;
             }
             public void getResult()
             {return result;}
}
而利用本发明的编制方法的编制如下:
@Start(post=“doSerarch”)
public String getSearchResult(String query)
{
              //start process
              this.query=query;
              return ProcessEngine.start(this);
}
@AndSplit(name=“doSearch”,post={“google”,”baidu”,”yahoo”})
private void getResult(){
              gSearch.result=null;
              bSearch.result=null;
              ySearch.result=null;
}
@InvokeActivity(name=“google”,post=“merge”)
private void googleSearch()
{
      gSearch.result=googleSearcher.search(query);
}
@InvokeActivity(name=“baidu”,post=“merge”)
private void baiduSearch()
{
      bSearch.result=baiduSearcher.search(query);
}
@InvokeActivity(name=“yahoo”,post=“merge”)
private void yahooSearch()
{
      ySearch.result=ySearcher.search(query);
}
可以看出,本发明的编制方法的代码量大大地减少。而如前所述,由于没有引入其它的语言作为编制逻辑,因此减轻了程序员学习其他语言的负担,提高了业务编制和执行效率。
通过以上的描述,可以看出,相较于现有的基于XML的流程服务编制方法,根据本发明的基于注解的服务编制方法,具有仅需要单一的编程语言、利用编程语言进行开发、在运行期间只有单一的编程语言交互以及没有支持事件等有益效果。而相较于纯Java语言而言,其得益于注解属性以及利用API以及控制台的建立,又克服了纯Java语言所具有的对于流程开发者来说实现平行和同步的困难性(多线程对于开发人员来说编写的难度比较大),也避免了管理者和监控者对于个案的ad-hoc实施。
应当注意,为了使本发明更容易理解,上面的描述省略了对于本领域的技术人员来说是公知的、并且对于本发明的实现可能是必需的更具体的一些技术细节。
提供本发明的说明书的目的是为了说明和描述,而不是用来穷举或将本发明限制为所公开的形式。对本领域的普通技术人员而言,许多修改和变更都是显而易见的。
因此,选择并描述实施方式是为了更好地解释本发明的原理及其实际应用,并使本领域普通技术人员明白,在不脱离本发明实质的前提下,所有修改和变更均落入由权利要求所限定的本发明的保护范围之内。

Claims (11)

1.一种流程处理方法,包括:
获取已添加注解的活动的程序段,其中注解与流程中的活动相关;
从获取的已添加注解的活动的程序段中提取流程逻辑并形成流程定义;
根据形成的流程定义创建流程执行模型;
按照流程执行模型调用已添加注解的所述活动的程序段来执行相应的流程。
2.根据权利要求1所述的流程处理方法,其中所述从获取的已添加注解的活动的程序段中提取流程逻辑并形成流程定义进一步包括:
注册描述流程的程序;
提取对应于每个所述活动的程序段的注解;以及
读取注解的属性并分别将读取的属性信息添加到流程定义中。
3.根据权利要求1所述的流程处理方法,其中所述根据形成的流程定义创建流程执行模型进一步包括存储流程定义中每个所述活动的程序段。
4.根据权利要求1所述的流程处理方法,其中根据形成的流程定义创建流程执行模型进一步包括存储创建的流程执行模型。
5.根据权利要求1所述的流程处理方法,其中所述按照流程执行模型调用已添加注解的所述活动的程序段来执行相应的流程进一步包括:
响应于从外部接收到服务调用创建流程实例;
在存储的流程执行模型中为流程实例寻找相应的流程执行模型;
在存储的活动的程序段中查找用于该流程实例的程序段;以及
按照存储的流程执行模型执行所查找的程序段。
6.根据权利要求5所述的流程处理方法,其中所述按照流程执行模型调用已添加注解的所述活动的程序段来执行相应的流程包括:
判断当前已经处理的程序段是否为处理中的最后一个活动,并且
如果不是最后一个活动,则返回该活动的结果并查找和执行剩余的活动的程序段进行调度;
如果是最后一个活动,则结束按照流程执行模型调用添加注解的所述活动的程序段来执行相应的流程的处理。
7.一种流程处理装置,该装置包括:
流程注解获取器,用于获取已添加注解的活动的程序段,其中注解与流程中的活动相关;
注解分析器,用于从获取的已添加注解的活动的程序段中提取流程逻辑并形成流程定义;
流程执行模型生成器,用于根据形成的流程定义创建流程执行模型;
活动执行器,用于按照存储的流程执行模型调用已添加注解的所述活动的程序段来执行相应的流程。
8.根据权利要求7所述的流程处理装置,还包括:
注解处理器,用于读取注解的属性并分别将所读取的属性信息添加到流程定义中。
9.根据权利要求7所述的流程处理装置,还包括:
活动方法注册库,用于存储流程定义中每个所述活动的程序段。
10.根据权利要求9所述的流程处理装置,还包括:
流程执行模型注册库,用于存储由流程执行模型生成器创建的流程执行模型。
11.根据权利要求10所述的流程处理装置,还包括:
活动调度器,用于从所述流程执行模型注册库处为每一个流程实例寻找相应的流程执行模型,从活动方法注册库查找相应活动的程序段,并提供给所述活动执行器执行。
CNA2008101093794A 2008-06-02 2008-06-02 流程处理方法和装置 Pending CN101599010A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNA2008101093794A CN101599010A (zh) 2008-06-02 2008-06-02 流程处理方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNA2008101093794A CN101599010A (zh) 2008-06-02 2008-06-02 流程处理方法和装置

Publications (1)

Publication Number Publication Date
CN101599010A true CN101599010A (zh) 2009-12-09

Family

ID=41420466

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2008101093794A Pending CN101599010A (zh) 2008-06-02 2008-06-02 流程处理方法和装置

Country Status (1)

Country Link
CN (1) CN101599010A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073505A (zh) * 2011-01-31 2011-05-25 北京科技大学 面向服务组装的声明式事务集成方法和系统
CN102891892A (zh) * 2012-09-28 2013-01-23 用友软件股份有限公司 用于面向服务架构系统的附加信息携带装置和方法
CN106055322A (zh) * 2016-05-26 2016-10-26 中国银联股份有限公司 一种流程调度方法及装置
CN109447406A (zh) * 2018-09-20 2019-03-08 武汉达梦数据库有限公司 一种创建流程的方法以及创建流程的装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073505A (zh) * 2011-01-31 2011-05-25 北京科技大学 面向服务组装的声明式事务集成方法和系统
CN102073505B (zh) * 2011-01-31 2013-09-25 北京科技大学 面向服务组装的声明式事务集成方法和系统
CN102891892A (zh) * 2012-09-28 2013-01-23 用友软件股份有限公司 用于面向服务架构系统的附加信息携带装置和方法
CN106055322A (zh) * 2016-05-26 2016-10-26 中国银联股份有限公司 一种流程调度方法及装置
CN109447406A (zh) * 2018-09-20 2019-03-08 武汉达梦数据库有限公司 一种创建流程的方法以及创建流程的装置

Similar Documents

Publication Publication Date Title
Balocco et al. Lean business models change process in digital entrepreneurship
Van Der Aalst et al. Design and implementation of the YAWL system
Havey Essential business process modeling
Canfora et al. A wrapping approach for migrating legacy system interactive functionalities to service oriented architectures
Limthanmaphon et al. Web service composition with case-based reasoning
EP2369480A2 (en) Mashup infrastructure with learning mechanism
Foster A rigorous approach to engineering web service compositions
US20110047415A1 (en) Debugging of business flows deployed in production servers
Liang et al. Service pattern discovery of web service mining in web service registry-repository
ter Beek et al. A survey on service composition approaches: From industrial standards to formal methods
US20060225064A1 (en) Flexible multi-agent system architecture
Berardi Automatic Service Composition. Models, Techniques and Tools.
Canal et al. Extending CORBA interfaces with/spl pi/-calculus for protocol compatibility
CN101599010A (zh) 流程处理方法和装置
Kharwat Computer simulation: an important tool in the fast-food industry
CN116185242B (zh) 业务编排方法、装置和电子设备
Hou et al. Modeling and verifying web services driven by requirements: An ontology-based approach
Moschoyiannis et al. True concurrency in long-running transactions for digital ecosystems
Davidrajuh et al. Identifying potential supplier for formation of virtual manufacturing systems
Di Lorenzo et al. Turning web applications into web services by wrapping techniques
Chemaa et al. Web services modeling and composition approach using object-oriented petri nets
Rauf et al. Beyond crud
Krämer Component meets service: what does the mongrel look like?
Koch Migrating monolithic architectures to microservices: a study on software quality attributes
CN110321111A (zh) 系统流程控制方法、装置、设备及计算机存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20091209