`
jbpm-x
  • 浏览: 49093 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

工作流活动实例状态转换的两种实现模式

阅读更多

作者:胡长城

今天和同事chelsea 就活动实例状态的实现思路上进行了讨论。我们两个站在了两个不同的角度来看待,这两个不同的角度也正好眼下最为常见到的两种实现思路:

      Chelsea是从状态角度来看待,当然也完全是从state pattern的角度来思考:状态在达到某个状态的时候,会引起或必须引起活动实例执行什么操作。

       而我是从活动实例的角度来考虑,活动实例的状态只是活动实例的一个属性体,是因为什么行为,造成了什么状态的结果。

<o:p> </o:p>

       这两种观点,没有谁对谁错,也没有谁优谁劣,两者是站在不同的角度来分析同一个问题。其实这两种模式在应用中都是很普遍的,也都是能够很好的解决问题的。不过在现有的workflow引擎实现中,基于活动实例的角度是占绝大多数的,比如obeshark等等。所以我受这个的影响也是比较深的。

<o:p> </o:p>

       先说说基于活动活动实例的角度的思路吧:

<o:p> </o:p>

       让我下先来看看状态类:

public final class WMActivityInstanceState extends WMObjectState {<o:p></o:p>

   public static final int OPEN_NOTRUNNING_INT = 0;<o:p></o:p>

   public static final int OPEN_SUSPENDED_INT = 1;<o:p></o:p>

}<o:p></o:p>

或者也可以这么表示:<o:p></o:p>

public enum WMActivityInstanceState{<o:p></o:p>

  NOTRUNNIN(0),<o:p></o:p>

  SUSPENDED(1);<o:p></o:p>

  private int code;<o:p></o:p>

  private WMActivityInstanceState(int code){this.code = code;}
  public int getCode(){return this.code}<o:p></o:p>

}

<o:p> </o:p>

       对于活动实例来说,状态只是其一个属性而已:

public class BasicActivityInstance extends BasicAttributedEntity{<o:p></o:p>

private int _state;<o:p></o:p>

    public void setState(int state) {<o:p></o:p>

        _state = state; }<o:p></o:p>

}<o:p></o:p>

或者也可以是<o:p></o:p>

Public void setState(WMActivityInstanceState state)

<o:p> </o:p>

       所以,从活动实例的角度来看,状态之间的关系是平行的。你可以在执行完一些初始化的操作之后,将活动实例的状态设置为Initialized:当然这个操作你必须显示的去设置活动实例(当然,你可以用一些Event去处理),比如调用活动实例的setState方法。至于为什么调用这个方法,或者此时设置的状态是对是错,活动实例并不关心

<o:p> </o:p>

       下面再来说说基于状态角度的思路吧,这个思路大体可以说就是state pattern的应用。

<o:p> </o:p>

       说道这儿,您可以看看这篇文档:从工作流状态机实践中总结状态模式使用心得 。当然如果您对state pattern不是很了解,那么建议你先看看这篇文档:设计模式之state <o:p></o:p>

<o:p> </o:p>

       State模式的着眼点就是状态,以状态的变迁影响实例的行为和动作。其实这就是两个不同的抽象体:statestateOwner,我们可以看到,活动实例对象就表现为stateOwner<o:p></o:p>

       State模式的依据是状态之间是有有向连接关系的,这有向连接关系其实就是状态的转换规则:A-B-C-D-A

       激发状态的变迁,是由外界的事件(Event影响的:这个事件会告知,当前的活动实例状态要从当前状态往下一个状态变迁。而活动实例并不知道下一个状态是什么,这完全是状态对象负责维护和告知的。

      

       至此,我们可以看出来了,两种方式的不同:

第一种方式(基于活动实例),其外界事件是影响到活动实例,或者说在事件中显示的告知活动实例状态从什么变为什么。

       第二种方式(基于实例状态),其外界事件是影响到活动实例状态对象,至于这个状态的下一个状态是什么,时间并不知道,完全由活动状态之间的关系来维护。


分享到:
评论

相关推荐

    SharePoint2010状态机工作流测试

    SharePoint 2010支持两种主要类型的工作流:序列工作流(Sequential Workflow)和状态机工作流。序列工作流按照预定顺序执行一系列活动,而状态机工作流则允许更灵活的状态转换,可以根据不同的条件或事件触发不同的...

    状态机工作流case

    状态机工作流是MOSS 2007支持的两种主要工作流类型之一,另一种是顺序工作流。状态机工作流特别适合那些有明确、预定义的顺序和条件的流程,因为它们能够精确地控制流程的走向。 在这个案例中,...

    编写的一个状态机工作流例子,实现抢签与会签功能!

    例如,使用WF提供的`WorkflowApplication`类可以方便地启动、暂停、恢复或终止工作流实例。通过扩展WF,还可以自定义跟踪和持久化策略,以满足特定需求。 总之,这个例子展示了如何使用Window WorkFlow Foundation...

    工作流系统异常处理实现方法

    工作流异常可以定义为一种对正常工作流流程状态的偏离,这种偏离主要指工作流实例运行状态与其原始定义的不一致,在某些特殊情况下(如工作流模型动态演进),也可能指与所期待状态的不一致。对于工作流异常的分类...

    创建Windows服务,创建状态工作流

    4. 执行与跟踪:工作流实例可以在运行时由Workflow Foundation宿主环境(如Windows服务)启动和管理。系统可以跟踪工作流的状态,以便进行日志记录、审计或异常处理。 5. 集成与持久化:工作流可以与业务系统深度...

    activiti工作流流程跟踪图(图片(两种方式))

    本实例聚焦于如何生成和查看Activiti流程的跟踪监控图,并且通过两种不同的方式来实现图片的生成,分别是路径线和节点的高亮显示。 首先,我们要理解Activiti的工作流模型。流程定义(Process Definition)是用BPMN...

    C#工作流开发实例项目源码

    - **状态机(State Machine)和顺序流(Sequential Flow)**:两种主要的工作流模型。状态机模型基于状态变化,而顺序流模型按照预定义的顺序执行活动。 - **持久化**:允许工作流在执行过程中暂停,并在需要时...

    土制状态机在工作流引擎中的应用

    而"entity"可能包含了流程实例和状态相关的数据实体,如工作流实例、任务实例、状态字段等。 在设计自定义状态机时,我们需要考虑以下几点: 1. **可扩展性**:状态机的设计应允许轻松添加新的状态和转换,以适应...

    net和sql server工作流引擎系统的设计与实现及源代码-workflow

    开发者可以使用WF来创建、执行和管理工作流实例。WF支持四种主要的工作流类型:顺序流程、状态机流程、活动和工作流服务(WF4)。 1. **活动设计**:WF的核心是活动,它们代表了工作流中的操作或决策。开发者可以...

    工作流数据模式workflow data patterns

    除了数据模式外,工作流系统还涉及其他两种重要的模式类型:控制模式和资源模式。 - **控制模式**:这些模式侧重于流程执行的逻辑结构,如分支、循环和条件判断等。它们定义了工作流如何按照预设的规则进行推进。 -...

    工作流原理及实例说明

    ### 工作流原理及实例说明 #### 一、工作流概述 工作流是指一系列相互关联的任务或步骤,这些任务或步骤按照特定的顺序执行,以完成特定的业务流程。在现代企业管理中,工作流技术被广泛应用于各种业务场景中,以...

    web工作流 流程设计

    学习这个文件,开发者可以了解如何使用特定的工具或框架来创建、配置和管理Web工作流,包括定义活动、状态转换、审批规则以及与数据库或其他系统的交互。 为了充分利用Web工作流设计工具,你需要掌握以下几点: 1....

    在线工作流demo

    总的来说,这个"在线工作流demo"是一个基于JavaScript的实例,展示了如何在Web环境中实现工作流管理。通过HTML和CSS构建用户界面,JavaScript负责处理逻辑,图像资源增强视觉效果,而兼容性测试则确保了在不同浏览器...

    工作流代码

    工作流代码是实现业务流程自动化的一种程序设计方式,它涵盖了任务分配、状态转换以及审批流程等多个环节。在本文中,我们将深入探讨工作流的核心概念、关键技术和如何通过代码实现。 工作流(Workflow)是一个系统...

    C#完整工作流系统源码(vs2005).rar

    工作流管理系统是一个软件系统,它完成工作流的定义和管理,并按照在计算机中预先定义好的工作流逻辑推进工作流实例的执行。一个完整的工作流管理系统是由工作流执行部件、工作流功能部件和外部应用系统构成的。工作...

    flash工作流

    6. **状态机实现**:工作流通常涉及到状态机的概念,每个工作流实例会经历一系列状态变化,需要在代码中实现状态转换的逻辑。 7. **可视化调试**:提供工具或日志来追踪和调试流程执行过程,这对于复杂工作流的调试...

Global site tag (gtag.js) - Google Analytics