• 工作流中对于事务处理的思考


    由于这个engine,需要考虑到COM+/ASP.NET/winform+Webservice,尤其是前者,业务系统的处理,和engine的处理,在事务上是否需要保持一个?咨询了一下ms,答案是不需要。不处理事务,而是按照错误来处理。所以,我写了一段伪码,业务单据的程序,这么修改应该就可以了吧!

            public void bill.Save(){
                
    bool enginesuccess = true;
                
    bool billsuccess = true;

                
    try{
                    db.BeginTransaction();

                    
    try{
                        WorkflowEngine engine 
    = WorkflowEngine.Create();
                        enginesuccess 
    = engine.TransferSomeData(bill.SomeMethod());// 把数据传递到engine的db中
                    }


                    
    catch(Exception ex){
                        enginesuccess 
    = false;//false可能是异常造成的,也可能是TransferSomeData方法返回的
                    }


                    bill.Save();
                    db.Commint();
                }

                
    catch(Exception ex){
                    billsuccess 
    = false;// 单据保存失败了
                }


                
    if(false == billsuccess && false == enginerror)// 单据保存失败,工作流engine也失败
                    db.Rollback();// 业务单据回滚
                    engine.CancelTransferSomeDataFromEngineDatabase();// 引擎回滚
                    MessageBox.Show(“无法启动工作流实例!请系统管理员进行处理!”);
                }

                
    else if(true == billsuccess && false == enginesuccess)// 单据保存成功,工作流engine失败
                    
    // db.Rollback();这句是否需要加上?需要处理吗?
                    engine.CancelTransferSomeDataFromEngineDatabase();// 引擎回滚
                    MessageBox.Show(“无法启动工作流实例!请系统管理员进行处理!”);
                }

                
    else if(false == billsuccess && true == enginesuccess)// 单据保存失败,工作流engine成功
                    db.Rollback(); // 单据回滚
                    engine.CancelTransferSomeDataFromEnginDatabase();// 引擎回滚
                }

            }


    btw,edit new post的时候,page打开的速度好慢。。。
  • 相关阅读:
    How to configure SQL 2005 Database Mail
    Restore DataBase後執行以下語句.txt
    安装Sql Server 2005出现“性能监视器计数器要求”错误解决方法
    无法对视图创建 索引,因为该视图未绑定到架构
    2D Barcode相關源碼 (Object C)
    row_number()
    最大边与最小边差最小的最小生成树——pku3522
    最小生成树计数——JSOI2008
    STL map 简单的应用
    最大生成树kruskal——pku3723
  • 原文地址:https://www.cnblogs.com/juqiang/p/25607.html
Copyright © 2020-2023  润新知