zoukankan      html  css  js  c++  java
  • wf的事务控制

        1.关于事务
        wf中的transaction Scope是使用transaction Scope这个Activity实现的,在lab08描述了一个银行转帐的场景。
     帐务表A减少100元,帐务表B增加100元,做为一个完整的事务,要么完全实现要么完全回退。不过如果我碰到这种应用场景,估计不会这样做。我的理解是transaction Scope Activity是建立再MTS上的分布式事务,如果是同一个数据库内部实现用数据库的事务控制会有性能优势,而且这样的场景如果有复用的需求,我会放到一个Activity中实现。不过这里只是演示,没有必要较真。许多事务控制还是需要transaction Scope Activity的,比如常见的接口程序里面,流程一般都是数据入库,进行逻辑处理或者逻辑校验如果成功可能还需要删除接口文件。这是一个需要事务控制的地方,而且也无法用数据库事务来控制,以前都考虑MTS在工作流中就要用到transaction Scope Activity。
    2.如何使用transaction Scope Activity
     2.1 从工具箱中脱动transaction Scope Activity到设计界面
     2.2 这时候我们看到设计界面上会出现一个transactionScopeActivity的区域,需要放入事务中的Activity都应该脱入其中。
     2.3 最后,要脱一个throw Activity进入这个区域,当异常发生时候会运行这个Activity。在这个Activity的属性中要指定Fault
      fautl属性定义了抛出的异常,可以是自定义的的Exception.
     2.4 view faults在那里不用我说了吧,在这里加入FaultHandle Activity,并指定属性捕获特定异常,看起来很象是ConditionAcitivityGroup。
      在这里面放个code Activity写入异常的处理逻辑。
     整个的处理过程看起来非常象try catch的逻辑
    3.上面的例子没有考虑事务补偿问题,如果事务失败需要补偿的话怎么办
     3.1 用CompensatableTransactionScopeActivity代替transaction Scope Activity
     3.2 throwActivity这个时候要放到CompensatableTransactionScopeActivity区域外面
     3.3 补偿逻辑用Compensate activity实现,在view Fault中加入Compensate activity。

  • 相关阅读:
    敏捷不是XP(口水文)
    利用异或的特性解决,找出重复数的问题,应该是目前最优算法。
    开源和免费那些事儿(二)
    开源和免费那些事儿
    LINQ本质 外篇 JOIN补遗
    在北京求.NET开发职位,人已经到达北京
    软件是邪恶的
    最近遇到的两个面试题兼卖身广告
    谈谈信仰和银弹。
    继续高阶函数好玩有用的扩展(网吧行文)
  • 原文地址:https://www.cnblogs.com/lodestar/p/656146.html
Copyright © 2011-2022 走看看