zoukankan      html  css  js  c++  java
  • 业务工作流平台设计(六)

    自定义活动()

    锁定处理

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

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

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

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

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

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

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

    l  记录工件的审核情况

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

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

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

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

    先讲到这里,可能有些人嫌我写的太少了,我只能说对不起了,我还有很多的工作要做。待续。
  • 相关阅读:
    8.【原创】使用Java8中的Stream特性筛选数据
    27.【转载】如何避免回表查询,什么是索引覆盖
    17.【转载】广东省2020学位英语考试报考须知
    Java 正则?:?=?!的理解
    集合的优化操作
    ArrayList中remove方法和set(null)的区别
    POI 导入、导出Excel
    JS 跳转到新页面并用post传参
    win 10 如何关闭自动更新
    JSON定义及应用
  • 原文地址:https://www.cnblogs.com/llxxbb/p/BusinnessProcessPlatform6.html
Copyright © 2011-2022 走看看