过程虚拟机(ProcessVirtualMachine)引言(Introduction)有许多描述业务过程管理(BPM)、工作流(workflow)或任务自动化编排(orchestration)的语言,为简洁,统称其为工作流(workflow)。工作流涉及两方面的内容:业务过程模型及其软件实现。目前,工作流技术的最大问题是无法正确处理这些技术的双重性质。本文旨在正确地定位此类问题。过程虚拟机不是定义一种流程语言,而是要澄清某些流程语言可能更好地适用一定的场合,而其他流程语言却适用另外的场合,因此,多种流程语言可以共存。过程虚拟机将定义一种可在所有基于图的执行语言间共享的公共模型,以及流程结构对应软件组件的实现策略,以便支持多种流程语言,也将更清晰地阐明流程技术如何正确地与软件开发项目(softwaredevelopmentprojects)融为一体。组件技术(Componenttechnology)分划流程语言的原因在于存在诸多可采用工作流技术的环境和特性,截至目前,主要聚焦于构建“最好的”流程语言,尚无在某些方面彼此相互融合或其他趋势。因此,过程虚拟机的新思路就是在不同的环境选用更适合的流程语言。尽管每一开发者了解基于关系数据库的关系模型,工作流却缺乏这样的概念模型。过程虚拟机将通过为流程结构定义组件模型填补这一空白,因此,完整的流程语言将在过程虚拟机之上定义为一组流程结构的实现,理解过程虚拟机的开发人员将更好地选择或把握目前更适用的流程引擎;此外,期盼过程虚拟机成为下一代所有流程引擎的基石。越来越多的软件开发由多种语言混合编程,正如采用通用的编程语言(如Java)可更好地描述领域模型或绑定框架到领域语言的“粘合代码(gluecode)”,但是,远离通用编程语言的变化正在发生,并影响到软件开发具体方向相关的许多框架,其典型代表为带有支撑包的框架和领域描述语言(DSL)的出现,这些框架和语言以更自然及易用的方法描述软件开发的特定部分。例如,流程引擎和流程语言,规则引擎和规则语言,对象关系映射框架和映射元数据,基于语法的解析器,反向控制(IoC)容器和对象关联语言,Web框架及其描述导航的配置文件等。当前所见的多数领域描述语言是基于图执行语言的,而过程虚拟机通过降低维护、设计及实现代价,而被视为基于图的业务描述语言的代表和所有这些语言的公用基础。嵌入式工作流(Embeddableworkflow)仅有少数流程自动化项目被认为应用了流程语言,“无代码”是业务过程管理套件倡导的唯一目标,此类项目中所有的东西必须创建为流程模型。我们认为业务过程管理、工作流或任务自动编排(orchestration)可以改善软件开发的某些方面,而软件开发项目通常综合了许多方面,仅有部分可建模为流程。基于此点,工作流技术是更适用的技术,一如当前的应用结果。因为目前的流程引擎不够嵌入化,其概念也有些模糊,而开发人员仍旧为其项目开发“本土化”的流程引擎。嵌入式工作流意即流程引擎可轻易地与目前的软件开发项目集成,这是相对于传统的单一BPM服务器(方法)而言的。通常的软件开发,存在向应用领域描述语言(DSL)发展的显明趋势,嵌入式工作流切实符合这种趋势:流程语言变为开发人员可在项目中使用的另一种语言。工作流是原有老式平面编程方式的补充。开发人员应该自由选择最适合其工作性质的语言。下属诸方面是实现嵌入式流程引擎的关键问题:持久化(Persistence):流程引擎本身与实际持久化技术解耦。首先,持久化本身应是可选的,如果需要,不同的持久化技术,例如JPA、Java串行化或XML等是可拔插的。如果采用关系数据库作为持久化实现,开发人员应可选择流程引擎数据库表与应用数据库表部署在一起或分离,亦或部署在不同的数据库中,后者或使整体应用更易于管理。服务(Services):引擎可能用到的服务是可拔插的,诸如计时器或异步消息服务,因此不同的环境可选用不同的实现,诸如标准Java(StandardJava)和企业Java环境(EnterpriseJava)。事务处理(Transactions):如果流程引擎与应用基于同样的数据库连接,无需全局或分布式事务处理,并可以减少(应用的)复杂性,同理适用于对象关系映射,例如Hibernate。支撑包(Libraries):区别与传统...