1. 程式人生 > >馳騁工作流引擎,表單引擎工作事務單元測試報告

馳騁工作流引擎,表單引擎工作事務單元測試報告

各位浙商銀行:

 

事務問題一直是浙商銀行客戶反覆提出尚未解決的問題,經過與浙商銀行的同事一起討論,我們把流程引擎的底層進行了一些改造,讓其支援事務,並且做出如下測試案例,請各位同事與客戶進行評估與測試。

關於bp架構的事務綜述

馳騁的bp框架所有執行update,delete,insert 的sql ,都是通過DBAccess.RunSQL()這個方法執行的,不管是直接執行的sql,還是實體類執行的增刪改查的sql。

所以該問題的解決重點就是DBAccess.RunSQL()這個方法。

執行SQL 部分:

正常執行(驗證通過):

程式碼如下

String bussID=

"zhoupeng";

//開始事務.

DBAccess.DoTransactionBegin(bussID);

 

String sql="UPDATE Port_Emp Set Name='admin1' where no='admin' ";

DBAccess.RunSQL(sql);

 

DBAccess.DoTransactionCommit(buessID); //提交事務.

執行後回滾(驗證通過)

程式碼

 

<%

 

String bussID="zhoupeng"; //定義事務的ID.

//開始事務.

DBAccess.DoTransactionBegin(bussID);

 

String sql="UPDATE Port_Emp Set Name='admin1' where no='admin' ";

DBAccess.RunSQL(sql);

 

DBAccess.DoTransactionRollback(bussID); //回滾事務.

return;

 

//DBAccess.DoTransactionCommit(buessID); //提交事務.

//return;   

 

%>

 

實體類更新部分

 

正常執行更新(測試通過)

 

 

執行後回滾 (測試通過)

 

 

 

流程引擎的重要過程

在流程引擎的操作中,我們列出瞭如下方法對事務有一定的要求。

建立workid(測試通過)

正常建立

程式碼如下:

 

首先刪除:

 

delete from ND301Rpt

delete from wf_generworkflow

 

執行後代碼:

 

 

執行兩次沒有錯誤。

 

撤銷建立

程式碼如下:

 

先執行刪除後的效果:

 

 

多次重新整理無資料,與上圖一樣,說明回滾成功:

 

 

執行傳送(測試通過)

錯誤傳送(沒有指定接受人的情況):

原始碼:

 

這時候,死鎖產生,因為沒有釋放連線,kill 99; 改造程式碼實現如下步驟。

 

 

改造後的程式碼:

 

控制檯已經輸出了異常的訊息,如控制檯圖。

流程狀態,仍然是空白狀態:

多次執行資料仍然與上圖相同,說明已經執行了回滾。

 

改造後,增加了接收人程式碼,如下圖:

 

正常傳送:

程式碼如下:

 

提示資訊正常:

撤銷傳送:

首先執行刪除語句:

編碼如下:

 

可以完整執行,執行後,查詢應該沒有資料,就符合預期。