业务过程虚拟机.doc





《业务过程虚拟机.doc》由会员分享,可在线阅读,更多相关《业务过程虚拟机.doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、过程虚拟机(Process Virtual Machine)引言(Introduction)有许多描述业务过程管理(BPM)、工作流(workflow)或任务自动化编排(orchestration)的语言,为简洁,统称其为工作流(workflow)。工作流涉及两方面的内容:业务过程模型及其软件实现。目前,工作流技术的最大问题是无法正确处理这些技术的双重性质。本文旨在正确地定位此类问题。过程虚拟机不是定义一种流程语言,而是要澄清某些流程语言可能更好地适用一定的场合,而其他流程语言却适用另外的场合,因此,多种流程语言可以共存。过程虚拟机将定义一种可在所有基于图的执行语言间共享的公共模型,以及流程结
2、构对应软件组件的实现策略,以便支持多种流程语言,也将更清晰地阐明流程技术如何正确地与软件开发项目(software development projects)融为一体。组件技术(Component technology)分划流程语言的原因在于存在诸多可采用工作流技术的环境和特性,截至目前,主要聚焦于构建“最好的”流程语言,尚无在某些方面彼此相互融合或其他趋势。因此,过程虚拟机的新思路就是在不同的环境选用更适合的流程语言。尽管每一开发者了解基于关系数据库的关系模型,工作流却缺乏这样的概念模型。过程虚拟机将通过为流程结构定义组件模型填补这一空白,因此,完整的流程语言将在过程虚拟机之上定义为一组流程
3、结构的实现,理解过程虚拟机的开发人员将更好地选择或把握目前更适用的流程引擎;此外,期盼过程虚拟机成为下一代所有流程引擎的基石。越来越多的软件开发由多种语言混合编程,正如采用通用的编程语言(如Java)可更好地描述领域模型或绑定框架到领域语言的“粘合代码(gluecode)”,但是,远离通用编程语言的变化正在发生,并影响到软件开发具体方向相关的许多框架,其典型代表为带有支撑包的框架和领域描述语言(DSL)的出现,这些框架和语言以更自然及易用的方法描述软件开发的特定部分。例如,流程引擎和流程语言,规则引擎和规则语言,对象关系映射框架和映射元数据,基于语法的解析器,反向控制(IoC)容器和对象关联语
4、言,Web框架及其描述导航的配置文件等。当前所见的多数领域描述语言是基于图执行语言的,而过程虚拟机通过降低维护、设计及实现代价,而被视为基于图的业务描述语言的代表和所有这些语言的公用基础。嵌入式工作流(Embeddable workflow)仅有少数流程自动化项目被认为应用了流程语言,“无代码”是业务过程管理套件倡导的唯一目标,此类项目中所有的东西必须创建为流程模型。我们认为业务过程管理、工作流或任务自动编排(orchestration)可以改善软件开发的某些方面,而软件开发项目通常综合了许多方面,仅有部分可建模为流程。基于此点,工作流技术是更适用的技术,一如当前的应用结果。因为目前的流程引擎
5、不够嵌入化,其概念也有些模糊,而开发人员仍旧为其项目开发“本土化”的流程引擎。嵌入式工作流意即流程引擎可轻易地与目前的软件开发项目集成,这是相对于传统的单一BPM服务器(方法)而言的。通常的软件开发,存在向应用领域描述语言(DSL)发展的显明趋势,嵌入式工作流切实符合这种趋势:流程语言变为开发人员可在项目中使用的另一种语言。工作流是原有老式平面编程方式的补充。开发人员应该自由选择最适合其工作性质的语言。下属诸方面是实现嵌入式流程引擎的关键问题: 持久化(Persistence):流程引擎本身与实际持久化技术解耦。首先,持久化本身应是可选的,如果需要,不同的持久化技术,例如JPA、Java串行化
6、或XML等是可拔插的。如果采用关系数据库作为持久化实现,开发人员应可选择流程引擎数据库表与应用数据库表部署在一起或分离,亦或部署在不同的数据库中,后者或使整体应用更易于管理。 服务(Services):引擎可能用到的服务是可拔插的,诸如计时器或异步消息服务,因此不同的环境可选用不同的实现,诸如标准Java(Standard Java)和企业Java环境(Enterprise Java)。 事务处理(Transactions):如果流程引擎与应用基于同样的数据库连接,无需全局或分布式事务处理,并可以减少(应用的)复杂性,同理适用于对象关系映射,例如Hibernate。 支撑包(Libraries
7、):区别与传统的单一引擎的部署方式,在客户端应用中仅部署引擎支撑包通常更符合实际需求。 易测试性(Testability):可执行的流程属于软件范畴,因此应采用与应用系统同样的测试方法。可通过不同的测试方案来测试流程的运转,当然,应与客户端应用基础结构的支撑部分集成在一起。 绑定(Binding): 应能简单地实现流程逻辑与软件项目支撑部分的绑定。如同在流程模型部分所见,一个可执行的流程通常是图形化流程与技术细节相结合的产物,截止目前,流程工具的重点在于图形化流程编辑。但软件工程常包含许多语言,诸如Java语言、流程语言及脚本语言,因此期望流程工具开始侧重于在同一软件项目(project)中可
8、为不同的人机开发环境提供一致的表示方法甚至更多,例如重构中重命名一个Java类时不仅可以代换Java类,还可以更新流程定义文件。范围(Scope)上文中已经解释了过程虚拟机可作为基于图的执行语言的公共基础,可被过程虚拟机利用的此类语言有三个主要特征: 以图表来描述流程,以便于相关各方之间的沟通。 流程表示某类“执行流”(execution flow)。 基于流程引擎的视野,流程隐性包含“等待”状态,并可“长时运行”(long running)。满足这些条件的任何软件开发部分都可构建在过程虚拟机之上,并非仅限于已知的工作流或业务过程管理(BPM),例如并非无意义的pageflow-一种描述web
9、应用页面间导航的语言。基本概念(Basics)此节描述过程虚拟机的基本原理,其后,将涉及实际流程语言所需特征的一系列扩展描述。流程是一执行流的图形化描述。例如,费用记录的过程就是一个流程,可部署到流程引擎中。一支流程可执行多次,例如,我上周一的费用由上述的费用记录流程处理,另一流程样例见下图:图1:保险申请流程示例流程的基本结构由“节点(nodes)”和转移(transitions )组成。转移有方向,因此,流程构成一个有向图。节点也可包含一组嵌套的节点,图2给出节点和转移的UML类图。图2:节点、转移及其行为的UML类图流程中每一节点有一段Java代码与其行为关联,与节点关联的Java代码接
10、口如图3所示:public interface Executable void execute(Execution execution) throws Exception;图3:定义节点行为的可执行接口现在,让我们来分析运行期的数据结构,一个流程执行(实例)是一个指向流程图运转路径当前位置的指针,如图4所示。图4:流程图运行路径当前位置指针创建一给定流程的新实例时,一起始节点将指向流程的开始节点,然后,流程实例(execution)等待一外部触发器,执行(execution)的方法及类结构如图5所示。图5:执行的UML类图外部触发器可在执行的方法proceed(String transitio
11、nName)中给定,此类触发器与有限状态机的“信号(signal)”操作非常相似。该执行知道如何解析“流程图”(process graph)。通过调用proceed方法,该执行将引发指定(或缺省)的转移,并抵达转移指向的节点,随即执行将更新其节点指针并响应相应的节点行为(动作)。节点的“行为动作“经“执行”获取作为传入参数的当前流程状态,在扩展部分的详细描述中,将举例说明变量或外部服务是如何通过执行作用的。此外,节点的行为动作通过执行过程获取控制权,意即可执行的实现表现为等待(wait)状态、继续执行(continue execution),创建并发执行(create concurrent e
12、xecutions)或执行相关的信息(update any information)等。来看节点行为动作实现的两个例子:任务节点(A task node)任务管理与流程密切相关的原因是由于软件系统中人工任务常被转换为“等待”状态,流程可采用下述方法轻易地将软件操作与人工任务结合在一起。T首先,需要流程执行引擎之外的任务资源库-保存人工任务的地方,通过此组件操作人员可浏览自己的任务列表并完成它们。其次,可设想如下任务节点的行为动作,一需(在proceed方法中)设置外部触发器,以便流程开始执行并抵达任务节点,节点的行为动作实现将在任务列表组件中为指定的操作者创建一新的任务,任务中也包含对“执行”
13、的引用;然后,节点的行为动作无延伸执行,意味着proceed方法调用返回时将指向相应的执行。public class TaskNode implements Executable String taskName; public void execute(Execution execution) / find the responsible person for this new task User assignedUser = calculateUser(taskName, execution); / crete the task Task task = new Task(taskName,
14、assignedUser, execution); / add the task to the repository TaskRepository taskRepository = execution.getContext().getTaskRepository(); taskRepository.addTask(task); 图6:节点实现的伪代码属性taskName标明流程定义文件中是如何描述配置信息的-应注入行为对象。于是,系统在等待用户完成任务期间可持久化执行信息,一段时间后,当用户完成任务时,任务管理组件将利用引用的执行(execution)提供触发器(trigger),此由proc
15、eed方法完成,然后执行恢复,离开该任务节点并继续执行。邮件节点(An email node)邮件节点不同于任务节点,它是自动执行的。邮件被发送后,执行应当立即转向关联的离开转移,该过程由EmailNode在其行为动作之后调用proceed方法完成,如图7所示。public class EmailNode implements Executable String recipient; String subject; String text; public void execute(Execution execution) / send the email sendEmail(recipient
16、, subject, text, execution); / propagate the execution execution.proceed(); 图7:email节点为代码实现类似与任务节点,在流程定义文件中定义接收者、主题及正文等属性。流程引擎将注入这些属性的值,可以是运行期间表达式的计算结果或采用映射实现。现在,我们来讨论提出之基本模型的主要特点。图形化表示(Graphical representation)过程虚拟机的基本概念揭示了图形化流程是如何被执行的,流程由节点和转移组成,且在图形化描述中二者之间直接关联(direct relation),此外,节点类的行为属性定义执行期间的
17、编程逻辑。过程虚拟机的图形化结构概念,囊括了几乎所有的流程语言结构,乃至高级结构,诸如:UML的超级状态可直接映射为嵌套节点(如图2所示),不过,流程语言可用新元素(或概念)扩展其基本结构,诸如计时器、数据流或条件等。等待状态(Wait states)在任务节点的例子中已见到节点可表示等待状态,当执行到达一节点时,不调用execution.proceed()方法,而是有外部客户端调用原有的proceed方法并返回,意即执行当前处于等待状态,典型示例为等待外部触发器,或持久化执行信息的良机。通过等待状态,流程可以表示贯穿软件运行的执行流(诸如一个事务中),以及流程引擎必须等待一外部触发器时的等待
18、状态,也称之为长时运行流程(long running processes)。同步执行(Synchronous execution)当客户端调用proceed方法时,在线程中开始解析及运转流程。典型过程如发生转移并执行目标节点,在调用目标节点的行为动作时,将其自身作为参数传递;再次执行时,通过调用proceed方法依次向前传递节点的行为(动作)。请注意,这些仍是在客户端的线程中进行的,同理,等待原有proceed方法调用并返回。换言之,其执行过程通常在客户端的线程中进行解析。当那个过程不再继续时,嵌套的proceed方法调用启动,因为该proceed方法应是相关行为方法的最后操作,该procee
19、d方法将被锁定直到一等待状态为止。缺省行为是同步执行,由于限制了事务的数量,从而达到改善性能的目的。然而,在到达一等待状态前,有许多自动化任务要完成,可以考虑异步执行方式。解析(Interpretation)主要的过程解析由行为实现托管,执行的唯一职责就是依据转移抵达其目标节点,随之更新节点指针,如此,执行的节点指针将常指向当前状态。这一点很重要,因为这意味着引擎行为(the bulk of behavior)是可拔插的,图解析的本质是基于组件模型完成的的,余者取决于流程结构实现,这就是在同一框架下构建多种语言的可行性所在。另一种描述节点实现职责的方法为:首先,可采用Java 完成任意类型的业
20、务逻辑,如发送邮件、创建任务、调用Web服务等,完成这些工作,该实现需要访问流程相关的上下文信息,诸如:流程变量、来自环境的服务、注入成员变量的配置信息等。然后,节点实现可传送流程执行的控制流,基本形式为等待状态和通过一离开转移延续到达执行。然而,在更多情况下,节点实现会重组运行期已完成运转的数据结构或其他。扩展概念(Extensions)前面几节叙述了过程虚拟机的基本操作,下面几节将描述对基本模型的扩展部分,阐明如何构建基于过程虚拟机的高级特性。变量(Variables)流程变量可包含单一执行过程相关的上下文信息,例如,在提薪流程中,期望值及原因可为流程变量。流程变量可通过一组流程执行相关的
21、(键,值)对加入到基本的过程虚拟机中。流程或节点可有变量声明,某些流程语言要求变量声明而另一些则非,此即为何键-值对要动态的原因,如同Java语言中的HashMap,变量声明可在运行期间初始化、清除或校验某些变量的可用性。由于组件编程模型由Java实现,因此流程变量应为POJO,流程语言如BPEL仅存储XSD或XML类片段,此时,流程语言本身负责将这些数据类型转换为POJO。持久化是可选的,所以通常情况下,流程变量可以存储任意POJO对象,仅当流程执行被存储时,才将POJO转换为所需的存储格式。在并发路径一节将引入“执行树”,也以之为流程变量定义一正常范围。动作(Actions)动作是一至关重
22、要的概念,在开发人员使流程可执行时分析人员得以自主建立模型。动作是流程图中不可见的编程逻辑片段,例如当离开某节点时,完成一定的数据库更新操作,或者,发生转移时删除某些文件。动作也被描述为流程事件的监听器。上文中展示的“可执行接口”可用于引用动作。流程事件是指向动作定义的指针。最常见的事件是“进入节点”、“离开节点”及“发生转移”。作为实现细节,曾提及可用API的触发方法来增强执行类。如此,客户端、动作和节点行为实现都可以触发事件。尽管动作(Action)在流程的图中不可见,为说明问题仍表明了动作与(流程)图的相关性,如图8所示。图8:最常用的时间但是,采用流程元素和简单事件类型串的组合体来标识
23、一个事件更便于应用,如此,可定义更多的事件类型,用户也可以自定义事件类型。事件也可以传播。通过嵌套节点可构建层次结构的流程。若流程语言实现如同UML超状态的结构,嵌套节点的事件可传入闭合的超状态,该传播可递归进行直至流程定义本身。超状态或流程可监听内部触发的某些类型的所有事件,例如,调用该超状态中发生的所有转移的动作。并发路径(Concurrent paths of execution)流程图中,一条执行路径可以仅指向一单一位置,某些情况下,流程中的某些部分可以并行,例如,流程中的运输和单证,此时,一完整的流程运转过程需记录多条路径的状态;为此,执行可扩展为父子结构。一给定流程新的执行作为主路
24、径,创建并发执行路径,才可创建子执行,如在分叉路径(亦即与分支)处子执行运转而父执行休眠。几个分叉和汇聚结构可由节点的行为(动作)实现,分叉可触发每一离开转移的一个新执行,可选方案为增加执行条件以防止创建某些并发执行。请注意,流程的并发大多数情况下不要求多线程实现。假如某一时刻不涉及任何动作,且分叉路径之后的所有节点处于等待状态,如图9所示,此时,数据库事务应包含休眠的父执行,并增加两个新的子执行,表示各自的等待状态。图9:(执行的)并发路径单个事务的更新无需在在两个独立的线程中进行,事实上,这些线程不得不进行同步,因为它们在同一数据库事务中运转。主要区别在于聚合行为。举两个聚合的例子来展示任
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 业务 过程 虚拟机

限制150内