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。

posted on 2007-02-25 15:29  lodestar  阅读(544)  评论(0编辑  收藏  举报

导航