过程组件模型
什么是过程组件模型
微软的工作流基础(WF)和JBoss jBPM是两种具有过程组件模型的技术。jBPM的基础在过程虚拟机中有记录,它与微软工作流基础所采取的方式有很多相似之处。
它的思想是将过程图中的活动与一个实现该活动运行时行为的组件相关联,组件由一种通用编程语言实现。过程图中的每一个活动都对应一个实现组件。例如,一个Web服务调用活动,一个人工任务活动或一个电子邮件活动都对应一个实现组件
这种方法的创新之处在于从BPM和工作流技术中提取了一个公共基础层。WF或过程虚拟机都不能被认为是BPM技术。相反,它们提供的是公共基础层,可以把这个基础层扩展成为功能齐全的BPM和工作流产品。或像David Chappell在这篇MSDN文章中明确表达的:
通过把工作流作为Microsoft .NET Framework 3.0的一部分实现,这种创建软件的方式对任何需要它的Windows应用都有裨益。包括运行在客户端和服务器端的应用,以及被最终用户、独立软件提供商和微软自己创建的应用。尽管需要些时间,Windows工作流基础将会成为微软产品和应用的工作流基础。
一个活动组件可以定义一组配置属性。例如,一个电子邮件活动可以有接收者,主题和正文的配置。这样,同一个活动实现在每次被使用的时候可以进行不同的配置。
这种新方法的意义
首先,可以观察到的是在同一活动组件框架上可以实现多个过程语言。每一个过程语言由多个活动类型组成。对于每一个活动类型,运行时行为可以用诸如Java或c#这样的通用编程语言实现。因此可执行过程语言就成为了一组活动类型的实现。这种活动组件最重要的部分是实现过程结构运行时行为的代码。但同时XML序列化,配置过程组件的设计窗体,持久化和许多其他部分都可能被包括在过程结构组件中。
因为它们可以支持多种过程语言,过程组件模型降低了单种语言的重要性。相反,它们使程序员可以为每一个过程选择最适合的可执行过程语言。与一个BPM引擎只支持一种过程语言相比,这种方式有效地分离了分析员和开发者间的关注点。
过程语言可扩展。假如你正在使用BPEL、jPDL或其他语言,你可以只实现你自己的活动并把它们加到语言中。也可以只暴露过程语言的子集,创建非常简单的领域特定过程语言,例如文档管理系统中用来指定批准的语言。
从这个角度看,我们可以定出4个层次的细节,它们非常适合平滑地将分析模型转换到可执行过程模型:
1.过程图形结构
2.活动类型选择(对应运行时实现)
3.运行时实现的配置
4.B方案:一个活动的客户化编码
因此可预见工具会将过程分析员和过程开发者之间的合作带到下一个层次。分析员可以使用设计工具来定义图的结构,但不用选择图中节点的活动类型。这将给建模者带来完全的自由。第二层的细节是选择活动类型。例如,指定过程中的某个步骤是人工任务,或是一个Web服务的调用。这就把图中节点和运行时行为关联了起来。第三层的细节是属性配置。分析员可能不知道Web服务端点的URL。那可能是Web服务调用节点的一个配置属性。做为最后一层细节,特定的客户化运行时行为可以由开发者编码实现,作为从所用过程语言里选择一个活动类型的替代方案。这个模式更好地支持了开发可执行过程的分析活动,该过程在分析与执行小节中已经讲过。
过程组件模型和支撑它的编程语言间配合得非常好。例如,jPDL非常适合Java项目,因为它可以很方便地将Java代码(如领域模型对象)包含进一个过程。同样的,Windows工作流状态机可以容易地集成C#代码。
过程引擎的操作管理变得更容易。软件开发的很多方面可以用某种可执行过程语言建模。设想这样的一个项目,你用BPEL来做服务编制,jPDL来管理人工任务,pageflow来定义一个WEB应用的页面流转。在一个框架里能够同时运行这些语言是一个有利因素。
结论
BPEL是一种可执行过程语言,它适合做集成,但因它与技术服务的紧密耦合而不适合业务过程管理。BPMN适合分析员做分析图,但不能执行。XPDL是一种较少采用的文件格式,可能会被BPDM替代。分析语言和执行语言的鸿沟仍然不可逾越。
为了创建一个更实际的能被普遍采用的BPM方法,我们需要从理清分析过程模型和可执行过程模型的区别开始。一旦我们放弃了让不懂技术的业务分析师画出马上可以执行的软件的念头,我们就可以找到一个更现实的业务过程管理方法。
当把一个分析过程模型和一个可执行过程实现联系起来的时候,这暗示了不要给图中的分析过程符号包括太多的复杂细节。只使用分析语言和执行过程语言所提供的交集,可以为业务分析师和开发者创建一门以单一图表为基础的通用语言。
不同的环境和不同的功能需求要求不同的可执行过程语言。目前想用一种过程语言覆盖所有的BPM、工作流和编制的想法过于宏大。即使这一想法能够实现,最终的过程语言也会因太复杂而没有实用价值。
工作流技术有了新的发展。微软的工作流基础和JBoss jBPM的过程虚拟机为运行时过程环境抽取了一个共同基础。这些技术创造了一个组件模型,这样就可以在这个共同基础上构建活动类型。基础定义了活动组件执行的运行时环境。每一种过程语言由一组活动类型组成。活动类型的运行时行为可以用一种通用编程语言实现。一个活动成为了一个组件。任何过程语言基本上都定义了一组活动类型。接着,一个过程语言就可以在过程组件框架基础上被构建成一组活动组件。