• 业务工作流平台设计(六)


    自定义活动()

    锁定处理

    在前面的文章我已经讲过,把用户数据的收集同工作流实例中分离出来。数据的存储也就很可能地进行了分离。这种数据的分离会要求我们去做更多的工作:

    l  维护工件(如稿件,任务等要在工作流中进行加工的东西)与工作流实例的关系。我们用WF自带的SqlWorkflowPersistenceService来完成工作流实例的存储。那么工件、工件与WF实例的关系及相关的处理情况应交给应用系统来维护。有关这方面的内容请看后面的“工作流的工件维护框架”。

    l  保持工件与WF实例的状态一致性。这部分的解决请后后面的有关“状态一致性”的话题。

    l  独占式处理。这是本节的重点内容。

    独占式处理,其实处理过程很简单,就是在处理时对数据加把锁,就象进厕所把门锁上一样:)。这里不讲怎样去加锁,而是讲对哪些数据进行加锁以及何时进行加锁。

    我们来看一下要完成一个审核活动所要处理的数据

    l  对工件进行编辑并进行保存

    l  记录工件的审核情况

    l  运行完后保存WF实例的状态

    其实我们需要锁定的数据只有两个:工件和WF实例。如果工件锁定不成功的话则应退出WF实例的运行,有关如何中止活动的运行,就看后续的文章;如果加锁成功则直到WF实例持久化后再解锁。注意,虽然WFSqlWorkflowPersistenceService本身有加锁的功能,但还是要等到WF实例持久化后再对工件解锁。

    这里有一件事情还要说明。工件在审核过程中可能不会被修改,如果从打开工件时刻开始加锁,则会大大的增加占有时间!切记。我们可以在工件第一次被修改的事件中进行加锁处理,以尽可能地减少占有时间。

    讲到这里,细心的人可能发现,工件可能在处理过程中没有被修改,即没有产生加锁信息,此时如果我们运行了WF实例,情况是危险的。我们在进行WF时一定要检测工件是否被锁定了,如果没有锁定则进行加锁,然后再运行WF实例。

    先讲到这里,可能有些人嫌我写的太少了,我只能说对不起了,我还有很多的工作要做。待续。
  • 相关阅读:
    UVA 12307 Smallest Enclosing Rectangle
    UVALive 4728 Squares
    扩栈代码
    uva 10256 The Great Divide
    uva 11168 Airport
    uva 10625 Board Wrapping
    bzoj千题计划206:bzoj1076: [SCOI2008]奖励关
    NOIP2017 列队
    bzoj3529: [Sdoi2014]数表
    bzoj1966: [Ahoi2005]VIRUS 病毒检测
  • 原文地址:https://www.cnblogs.com/llxxbb/p/BusinnessProcessPlatform6.html
Copyright © 2020-2023  润新知